60 把二叉树打印成多行

从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。

思路一:非递归的方法

 1 /*
 2 public class TreeNode {
 3     int val = 0;
 4     TreeNode left = null;
 5     TreeNode right = null;
 6     public TreeNode(int val) {
 7         this.val = val;
 8     }
 9 }
10 */
11 import java.util.ArrayList;
12 import java.util.Queue;
13 import java.util.LinkedList;
14 public class Solution {
15     ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
16         ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
17         //考虑最特殊情况
18         if(pRoot == null) return list;
19         Queue<TreeNode> queue = new LinkedList<TreeNode>();
20         queue.offer(pRoot);
21         while(!queue.isEmpty()){
22             int count = 0;//count变量表示当前层已经打印的结点个数
23             int size = queue.size(); //size变量表示当前层的总结点个数
24             //list是大的ArrayList,temp是里面小的ArrayList.每遍历完一层,要把temp放进list里面
25             ArrayList<Integer> temp = new ArrayList<Integer>();
26             while(count<size){
27                 count++;
28                 TreeNode pr = queue.poll();
29                 temp.add(pr.val);
30                 if(pr.left!=null) queue.offer(pr.left);
31                 if(pr.right!=null) queue.offer(pr.right);
32             }
33             list.add(temp);
34         }
35         return list;
36     }
37 }

 思路二:递归

posted @ 2019-07-11 12:17  淡如水94  阅读(111)  评论(0)    收藏  举报