Leetcode 103. 二叉树的锯齿形层次遍历
题目描述
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7]
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
解题思路:DFS
题目上说的是以从左到右,从右到左的顺序层序遍历节点,并且需要按顺序存储每一行遍历的节点,其实从左到右和从右到左的过程可以转换为队列首部进入与队列尾部进入,因此我们只需要记录每一层的level,并根据level来决定是从左到右还是从右到左将节点放入即可
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
checkzigzagLevel(root,0,res);
return res;
}
public void checkzigzagLevel(TreeNode root,int level,List<List<Integer>> res){
if(root==null)return;
//level大于size说明这一层的队列还为初始化
if(level>=res.size()){
res.add(new LinkedList<>());
}
//偶数level表示从左往右,那么直接加入到队尾就好
if(level%2==0){
res.get(level).add(root.val);
}else{
//奇数level表示从右到左,那么就加入队头
res.get(level).add(0,root.val);
}
checkzigzagLevel(root.left,level+1,res);
checkzigzagLevel(root.right,level+1,res);
}
}