题目
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
样例:
给定二叉树: [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回其层次遍历结果:
[
[3],
[20,9],
[15,7]
]
解题思路
思路几乎与32-II完全相同,只需要设置一个奇偶行的标记即可;是奇数行就正常打印
代码
/**
* 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>> levelOrder(TreeNode root) {
if(root==null){
return new ArrayList<>();
}
Queue<TreeNode>queue=new LinkedList<>();
List<List<Integer>>res=new ArrayList<>();
int sum=1;//判断奇偶行
queue.add(root);
while(!queue.isEmpty()){
int k=queue.size();
LinkedList<Integer>tmp=new LinkedList<>();
for(int i=0;i<k;i++){
TreeNode t=queue.poll();
if(sum%2==1){
tmp.add(t.val);//是奇数行还是从左到右的顺序打印
}else{
tmp.addFirst(t.val);//要是链表才有这个方法
}
if(t.left!=null)queue.add(t.left);
if(t.right!=null)queue.add(t.right);
}
res.add(tmp);
sum++;
}
return res;
}
}