欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

LeetCode 103 二叉树的锯齿形层序遍历

程序员文章站 2022-03-03 11:20:42
...

LeetCode 103 二叉树的锯齿形层序遍历

题目链接

给定一个二叉树,返回其节点值的锯齿形层序遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。

例如:

给定二叉树 [3,9,20,null,null,15,7],

    3
   / \
  9  20
    /  \
   15   7

返回锯齿形层序遍历如下:

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

简单 BFS,在层序遍历的基础上加一个层号即可,若为偶数则把该层遍历得到的值翻转即可。注意当树为空时,返回也应该是个空数组,AC代码如下:

class Solution {
public:
    vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
        vector<vector<int>>ans;
        int id=1;
        queue<TreeNode*>q;
        q.push(root);
        while(!q.empty()){
            int siz=q.size();
            vector<int>v;
            while(siz--){
                TreeNode* a=q.front();
                q.pop();
                if(a){
                    v.push_back(a->val);
                    if(a->left) q.push(a->left);
                    if(a->right) q.push(a->right);
                }
            }
            if(v.size()){
                if(id%2) ans.push_back(v);
                else reverse(v.begin(),v.end()),ans.push_back(v);
            }
            id++;
        }
        return ans;
    }
};