AcWing 45. 之字形打印二叉树-java
原题链接
中等
作者:
jkm
,
2021-03-30 10:16:55
,
所有人可见
,
阅读 380
之字形打印二叉树
- 采用宽度遍历,利用队列的先进先出的特性,先让根结点入队,每次出队前计算当前队列的元素个数,然后将该元素个数的元素全部出队即为当前层的所有元素。设置标志位,每次遍历完取反即可让其以之字形方式存储。
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
class Solution {
public List<List<Integer>> printFromTopToBottom(TreeNode root) {
List<List<Integer>> res = new LinkedList<>();
if (root == null)
return res;
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
boolean zigzag = true;
while (!queue.isEmpty()){
int size = queue.size();
List<Integer> level = new LinkedList<>();
while (size > 0){
TreeNode p = queue.poll();
if (p.left != null)
queue.offer(p.left);
if (p.right != null)
queue.offer(p.right);
if (zigzag)
level.add(p.val);
else
level.add(0,p.val);
size--;
}
zigzag = !zigzag;
res.add(level);
}
return res;
}
}