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

题目描述

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

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

1
2
3
4
5
6
7
8
9
10
11
12
    3
/ \
9 20
/ \
15 7
返回锯齿形层序遍历如下:

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

解题思路

这道题是二叉树层次遍历的变种,可以参照二叉树遍历大总结里面的层次遍历中的方法进行微改动。

由于我们已经加上了level来指示二叉树的层数,那么我们其实只要判断level为奇数的时候,将存储那一层结点值的vector颠倒再加入两层vector就可以了

代码示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
void levelOrder(TreeNode* root,vector<vector<int>>&res,int lev)
{
if(root==nullptr) return ;
queue<TreeNode*>q;
q.push(root);
while(!q.empty())
{
int size=q.size();
vector<int>level;
for(int i=0;i<size;i++)
{
TreeNode* node=q.front();
q.pop();
if(node==nullptr) continue;
level.push_back(node->val);
q.push(node->left);
q.push(node->right);
}
if(lev%2==1) reverse(level.begin(),level.end());
lev++;
if(level.size()>0) res.push_back(level);

}
}
vector<vector<int>> zigzagLevelOrder(TreeNode* root) {
vector<vector<int>>res;
levelOrder(root,res,0);
return res;


}