103. 二叉树的锯齿形层次遍历
2025-04-14 10:58:22
思路
这题也是按层遍历,因此我们自然想到也用队列来处理。
那么如何在隔层反向输出呢?其实我们无需更改BFS的遍历顺序,而是不断插入临时链表的头部, 这样我们自然就得到了反向。
知识点
Java的List接口有多种实现,在只需要频繁插入头尾节点时,使用LinkedList会快一点。反之,在需要随机读取时,使用ArrayList会快非常多。
Code
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
Deque<TreeNode> queue = new LinkedList<>();
if (root == null) return ans;
queue.offer(root);
while (!queue.isEmpty()) {
//List也可以是linkedList
List<Integer> curLevel = new LinkedList<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode node = queue.poll();
if (ans.size() % 2 == 0) curLevel.add(node.val);
else curLevel.addFirst(node.val);
if (node.left != null) queue.offer(node.left);
if (node.right != null) queue.offer(node.right);
}
ans.add(curLevel);
}
return ans;
}
}