剑指offer_ 按之字形顺序打印二叉树

题目描述

请实现一个函数按照之字形打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右至左的顺序打印,第三行按照从左到右的顺序打印,其他行以此类推。

和上题差不多,加上一个反转list就行了,设置一个flag标志位,每循环一轮就反置。可以使用Collections工具类的reverse()方法。

 1 import java.util.*;
 2 
 3 /*
 4 public class TreeNode {
 5     int val = 0;
 6     TreeNode left = null;
 7     TreeNode right = null;
 8 
 9     public TreeNode(int val) {
10         this.val = val;
11 
12     }
13 
14 }
15 */
16 public class Solution {
17     ArrayList<ArrayList<Integer> > ans= new ArrayList<>();
18     ArrayList<TreeNode> queue = new ArrayList<>();
19     boolean flag = false;
20     public ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
21         if(pRoot ==null) return ans;
22         queue.add(pRoot);
23         while(!queue.isEmpty()){
24             int count = queue.size();
25             ArrayList<Integer> arr= new ArrayList<>();
26             while(count-->0){
27             TreeNode temp = queue.remove(0);
28             arr.add(temp.val);
29             if(temp.left!=null){queue.add(temp.left);}
30             if(temp.right!=null){queue.add(temp.right);}
31             }
32             if(flag){
33                 Collections.reverse(arr);
34             }
35             flag = !flag;
36             ans.add(arr);
37         }
38             return ans;
39     }
40 
41 }

 

posted @ 2019-09-01 09:54  chyblogs  阅读(116)  评论(0)    收藏  举报