LeetCode | Binary Tree Zigzag Level Order Traversal(二叉树锯齿形层序输出)

Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

return its zigzag level order traversal as:

[
  [3],
  [20,9],
  [15,7]
]

题目解析:

第一层正序输出,第二层反序输出。题目很简单,我们设置一个标记count,当count为偶数的时候,就正常输出,当count为奇数的时候,调用函数reverse将数组翻转即可。

这里的count也能用于统计树的深度!

class Solution {
public:
    vector > zigzagLevelOrder(TreeNode *root) {
        if(root == NULL)
            return res;
        queue tree;
        int count = -1; //记录层次数,根为0层;
        tree.push(root);

        while(!tree.empty()){
            int n = tree.size();
            TreeNode *p;
            vector node;
            count++;
            for(int i = 0;i < n;i++){
                 p = tree.front();
                 tree.pop();
                 if(p->left) tree.push(p->left);
                 if(p->right) tree.push(p->right);
                 node.push_back(p->val);
            }
            if(count%2 != 0){   //当为奇数层的时候,翻转数组元素
                reverse(node.begin(),node.end());   
            }
            res.push_back(node);
        }
        return res;
    }


private:
    vector > res;
};





Given a binary tree, return the zigzag level order traversal of its nodes' values. (ie, from left to right, then right to left for the next level and alternate between).

For example:
Given binary tree {3,9,20,#,#,15,7},

    3
   / \
  9  20
    /  \
   15   7

return its zigzag level order traversal as:

[
  [3],
  [20,9],
  [15,7]
]

你可能感兴趣的:(LeetCode)