题目:请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。
本题同样采用辅助队列进行层序遍历,方法和剑指 Offer 32 - II. 从上到下打印二叉树 II相同,输出方式稍有不同。每一层遍历结束后,如何是偶数层,就逆向从右往左保存结果。
public List<List<Integer>> levelOrder(TreeNode root) {
List<List<Integer>> result = new ArrayList<List<Integer>>();
Queue<TreeNode> queue = new LinkedList<TreeNode>();
if(root==null){
return result;
}
queue.offer(root);
int flag = 0;
while(!queue.isEmpty()){
int size = queue.size();
List<Integer> list = new ArrayList<Integer>();
for(int i=0;i<size;i++){
TreeNode temp = queue.poll();
list.add(temp.val);
if(temp.left!=null){
queue.offer(temp.left);
}
if(temp.right!=null){
queue.offer(temp.right);
}
}
if(flag%2==1){
int[] arry = new int[list.size()];
for(int k=0;k<arry.length;k++){
arry[k] = list.get(k);
}
list.clear();
for(int k=arry.length-1;k>=0;k--){
list.add(arry[k]);
}
}
result.add(list);
flag++;
}
return result;
}