题目
从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
分析
用队列从根开始存储,首先判断队列是否为空,若不为空,取出第一个元素,将该元素的左孩子和右孩子(在有的情况下)继续存到队列中,知道队列为空。
注,因为返回的是ArrayList<ArrayList<Integer>>类型,所以我们应该注意在哪里去创建ArrayList<Integer>。
代码
1 ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { 2 ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>(); 3 if(pRoot==null) 4 return list; 5 Queue<TreeNode> q = new LinkedList<TreeNode>(); 6 q.add(pRoot); 7 while(!q.isEmpty()){ 8 int low = 0, high = q.size(); 9 ArrayList<Integer> li = new ArrayList<Integer>(); 10 while(low<high){ 11 TreeNode node = q.poll(); 12 li.add(node.val); 13 if(node.left!=null) 14 q.add(node.left); 15 if(node.right!=null) 16 q.add(node.right); 17 low++; 18 } 19 list.add(li); 20 } 21 return list; 22 }