题目
给定一个二叉树,返回其节点值的锯齿形层次遍历。(即先从左往右,再从右往左进行下一层遍历,以此类推,层与层之间交替进行)。
例如:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回锯齿形层次遍历如下:
[
[3],
[20,9],
[15,7]
]
Related Topics 栈 树 广度优先搜索
思路
套用BFS(广度优先搜索)模板就可以轻松实现啦!有个额外条件就是在走z
型,就是加一个计数条件,奇变(反转)偶不变。
在我这篇文章里我写了一下BFS模板,可以参考下吖。哈哈,学会了应该可以把所以leetcode 的BFS题目都刷了。
Leetcode199 二叉树的右视图 - JAVA
解法
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new ArrayList<>();
if (root==null) return res;
Queue<TreeNode> queue = new LinkedList<>();
queue.add(root);
int c = 0;
while (!queue.isEmpty()) {
List<Integer> list = new ArrayList<>();
int len = queue.size();
for (int i = 0; i < len; i++) {
TreeNode node = queue.poll();
list.add(node.val);
if (node.left !=null) {
queue.add(node.left);
}
if (node.right !=null) {
queue.add(node.right);
}
}
if (c%2==0) {
res.add(list);
} else {
Collections.reverse(list);
res.add(list);
}
c++;
}
return res;
}
}