Leetcode-103. Binary Tree Zigzag Level Order Traversal

来源:互联网 发布:网络主播怎么招聘 编辑:程序博客网 时间:2024/05/16 11:11

题目

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,null,null,15,7],
3
/ \
9 20
/ \
15 7
return its zigzag level order traversal as:
[
[3],
[20,9],
[15,7]
]

思路

在Leetcode-102. Binary Tree Level Order Traversal的基础上添加一个标志变量,循环一次改变一次,如果为真则反转那一层的结果,否则不改变

代码

class Solution {public:    vector<vector<int> > zigzagLevelOrder(TreeNode* root) {        vector<vector<int> >res;        if(!root)            return res;        queue<TreeNode*> que[2];        int flag = 0;        que[flag].push(root);        bool zigzag = false;        while(!que[flag].empty()) {            vector<int> cur;            while(!que[flag].empty()) {                TreeNode* t = que[flag].front();                que[flag].pop();                cur.push_back(t->val);                if(t->left)                    que[(flag+1)%2].push(t->left);                if(t->right)                    que[(flag+1)%2].push(t->right);            }            if(zigzag) {                for(int i=0, j=cur.size()-1; i<j; i++, j--) {                    int temp = cur[i];                    cur[i] = cur[j];                    cur[j] = temp;                }            }            zigzag = !zigzag;            res.push_back(cur);            flag = (flag+1)%2;        }        return res;    }};
0 0
原创粉丝点击