题目
题解
采用dfs算法广度优先算法,就是一层一层的展开整个树,List每展开一层先从右边添加,下一层从左边添加这样一层一层递推。List我们采用双端队列,先offerLast()下一层再offerFirst()。完整代码如下,也是dfs的标准写法。
代码
public List<List<Integer>> zigzagLevelOrder(TreeNode root) {
List<List<Integer>> ans = new ArrayList<>();
if (root == null) {
return ans;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
boolean isOrderLeft = true;
while (!queue.isEmpty()) {
int size = queue.size();
Deque<Integer> levelList = new LinkedList<>();
List<Integer> temp = new ArrayList<>();
for (int i = 0; i < size; ++i) {
TreeNode curNode = queue.poll();
if (isOrderLeft) {
levelList.offerLast(curNode.val);
} else {
levelList.offerFirst(curNode.val);
}
if (curNode.left != null) {
queue.offer(curNode.left);
}
if (curNode.right != null) {
queue.offer(curNode.right);
}
}
ans.add(new ArrayList<>(levelList));
isOrderLeft = !isOrderLeft;
}
return ans;
}
备注
本文正在参与「掘金 2021 春招闯关活动」, 点击查看。