Given the root of a binary tree, return the zigzag level order traversal of its nodes' values. (i.e., from left to right, then right to left for the next level and alternate between).
The number of nodes in the tree is in the range [0, 2000].
-100 <= Node.val <= 100
Solution:
Version 1:
class Solution {
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
if (root == null) {
return res;
}
Queue<TreeNode> q = new LinkedList<>();
q.offer(root);
// 为 true 时向右,false 时向左
boolean flag = true;
// while 循环控制从上向下一层层遍历
while (!q.isEmpty()) {
int sz = q.size();
// 记录这一层的节点值
LinkedList<Integer> level = new LinkedList<>();
// for 循环控制每一层从左向右遍历
for (int i = 0; i < sz; i++) {
TreeNode cur = q.poll();
// 实现 z 字形遍历
if (flag) {
level.addLast(cur.val);
} else {
level.addFirst(cur.val);
}
if (cur.left != null)
q.offer(cur.left);
if (cur.right != null)
q.offer(cur.right);
}
// 切换方向
flag = !flag;
res.add(level);
}
return res;
}
}