请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
例如:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
先上代码
class Solution {
public List<List<Integer>> levelOrder(TreeNode root) {
Queue<TreeNode> queue=new LinkedList<>();
List<List<Integer>> tmp= new ArrayList<>();
if(root!=null)
queue.add(root);
int flag=0;
while(!queue.isEmpty()){
LinkedList<Integer> list=new LinkedList<>();
for(int i=queue.size();i>0;i--){
TreeNode node=queue.poll();
if(tmp.size()%2==1) list.addFirst(node.val);//addFirst先进后出
else if(tmp.size()%2==0) list.addLast(node.val);//addLast先进先出
if(node.left!=null) queue.add(node.left);
if(node.right!=null) queue.add(node.right);
}
tmp.add(list);
}
return tmp;
}
}
用了奇偶校验,偶数层正常顺序打印,奇数层逆序输出打印。
addFirst:先进后出,相当于栈
addLast:先进先出,相当于队列