剑指 Offer 32 - III. 从上到下打印二叉树 III
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
提示:
节点总数 <= 1000
思路:
利用队列,先加入根节点,循环每层,不为空就继续执行,在循环中存放每层的遍历结果,利用双端队列存储,偶数层往左面添加,奇数层添加右面,遍历外部队列,判断左右节是否为空,不为空就加入队列,先进先出,广度遍历。
相关知识点:
LinkedList:双端队列
①LinkedList.poll():出头
②LinkedList.addLast():加入左面
③LinkedList。addFirst():加入右面
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue=new LinkedList<>();
List<List<Integer>> lists=new ArrayList<>();//size层数
if(root!=null) queue.add(root);
while(!queue.isEmpty()){
LinkedList<Integer> list=new LinkedList<>();
for(int i=queue.size();i>0;i--){
TreeNode a=queue.poll();
if(lists.size()%2==0) list.addLast(a.val);//偶数层,左边
else list.addFirst(a.val);
if(a.left!=null) queue.add(a.left);
if(a.right!=null) queue.add(a.right);
}
lists.add(list);
}
return lists;
}
}