Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:反相比例运算电路数据 编辑:程序博客网 时间:2024/04/30 03:20
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]

]

思路:和上一题类似。对于每层的遍历结果最后处理的时候如果是奇数层,则保持原来的顺序,如果是偶数场层的话,将当前层的遍历结果进行逆序即可

代码如下:

/** * Definition for a binary tree node. * struct TreeNode { *     int val; *     TreeNode *left; *     TreeNode *right; *     TreeNode(int x) : val(x), left(NULL), right(NULL) {} * }; */class Solution {public:    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {        vector<vector<int>>res;        if(!root)            return res;        queue<TreeNode*>que;        que.push(root);        int len=0;        while(!que.empty())        {            int size=que.size();            vector<int>tmp;            for(int i=0;i<size;i++)            {                TreeNode *top=que.front();                tmp.push_back(top->val);                if(top->left)                    que.push(top->left);                if(top->right)                    que.push(top->right);                que.pop();            }            if((++len)%2==0)                reverse(tmp.begin(),tmp.end());            res.push_back(tmp);        }        return res;            }};



0 0