• 使用队列进行层序遍历;
  • 根据层数判断数组是否需要反转;
  • 记录每层的遍历结果。
/*
struct TreeNode {
    int val;
    struct TreeNode *left;
    struct TreeNode *right;
    TreeNode(int x) :
            val(x), left(NULL), right(NULL) {
    }
};
*/
class Solution {
public:
    vector<vector<int> > Print(TreeNode* pRoot) {
        queue<TreeNode*> que;
        if (pRoot != NULL) que.push(pRoot);
        vector<vector<int>> result;
        int depth = 0;
        while (!que.empty()) {
            int size = que.size();
            depth++;
            vector<int> vec;
            for (int i = 0; i < size; i++) {
                TreeNode* node = que.front();
                que.pop();
                vec.push_back(node->val);
                if (node->left) que.push(node->left);
                if (node->right) que.push(node->right);
            }
            if (depth % 2 == 0) {
                reverse(vec.begin(), vec.end());
            }
            result.push_back(vec);
        }
        return result;
    }
    
};