LeetCode binary-tree-zigzag-level-order-traversal

题目描述

给定一个二叉树,返回该二叉树的之字形层序遍历,(从左向右,下一层从右向左,一直这样交替)

例如:

给定的二叉树是{3,9,20,#,#,15,7},

    3↵   / ↵  9  20↵    /  ↵   15   7

该二叉树之字形层序遍历的结果是

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

如果你不清楚“{1,#,2,3}"的含义的话,请继续阅读

我们用如下方法将二叉树序列化:

二叉树的序列化遵循层序遍历的原则,”#“代表该位置是一条路径的终结,下面不再存在结点。

例如:

   1↵  / ↵ 2   3↵    /↵   4↵    ↵     5

上述的二叉树序列化的结果是:"{1,2,3,#,#,4,#,#,5}".

解题思路

利用flag作为标记,来判断是否需要倒置。

/**
 * Definition for binary tree
 * 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 == NULL)
            return res;
        queue<TreeNode*> que;
        que.push(root);
        int flag = 0;
        while(que.size() != 0){
            vector<int> cnt;
            int len = que.size();
            for(int i = 0; i < len; i++){
                TreeNode *p = que.front();
                que.pop();
                cnt.push_back(p->val);
                if(p->left)
                    que.push(p->left);
                if(p->right)
                    que.push(p->right);
            }
            if(flag == 0)
                flag = 1;
            else{
                reverse(cnt.begin(), cnt.end());
                flag = 0;
            }
            res.push_back(cnt);
        }
        return res;
    }
};
发布了169 篇原创文章 · 获赞 9 · 访问量 4835

猜你喜欢

转载自blog.csdn.net/weixin_41317766/article/details/100929165
今日推荐