在经典的层序遍历的基础上,对层进行就判断,偶数层就进行翻转;奇数层则保持不变。

/*
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) {
        vector<vector<int> > ans;
        if (!pRoot) return ans;   // 空指针,直接返回
        queue<TreeNode*> que;
        que.push(pRoot);
        int c = 0;     // 记录奇偶层
        while(!que.empty()) {  // 队列不为空
            int n = que.size();
            vector<int> tmp;
            while (n--) {   // 当前层遍历
                tmp.push_back(que.front()->val);
                if (que.front()->left) que.push(que.front()->left);
                if (que.front()->right) que.push(que.front()->right);
                que.pop();
            }
            c++;
            if (c%2 == 0) {
                reverse(tmp.begin(), tmp.end());  // 偶数层,则反转
            }
            ans.emplace_back(tmp);
        }
        return ans;
    }

};