1. 题目

2. 解法
当我们遍历一棵二叉树时,我们可以按照层序遍历的方式,从上到下、从左到右地遍历每个节点。
而锯齿形层序遍历则是在层序遍历的基础上,
增加了一个规则:对于每一层,如果当前层是从左到右遍历的,则下一层就从右到左遍历;如果当前层是从右到左遍历的,则下一层就从左到右遍历。
这样,我们就可以得到一个“锯齿形”的遍历顺序。
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
if (root == null) {
return ans;
}
Queue<TreeNode> queue = new ArrayDeque<>();
queue.offer(root);
boolean leftToRight = true;
while (!queue.isEmpty()) {
List<Integer> levelNodeVals = new ArrayList<>();
int size = queue.size();
for (int i = 0; i < size; i++) {
TreeNode temp = queue.poll();
if (leftToRight) {
levelNodeVals.add(temp.val);
} else {
levelNodeVals.add(0, temp.val);
}
if (temp.left != null) queue.add(temp.left);
if (temp.right != null) queue.add(temp.right);
}
ans.add(levelNodeVals);
leftToRight = !leftToRight;
}
return ans;
}
浙公网安备 33010602011771号