描述:从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
思路:原型为层次遍历,因为要每一行换行输出,所以需要知道每一行多少元素。可以采用一个队列+两个状态变量的思路。打印每一层前,每行元素的个数为当前队列内元素的个数,并重置起始变量为0。这样当start=end时就说明本行打印完毕。
当然也可以用两个队列去做。一个辅助队列用于把原队列的内容保存下来
import java.util.*;
public class Solution {
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) {
ArrayList<ArrayList<Integer>> result= new ArrayList<ArrayList<Integer>>();
if(pRoot==null)
return result;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
TreeNode node = pRoot;
int start = 0;
int end = 1;
queue.offer(node);
ArrayList<Integer> al = new ArrayList<Integer>();
while(!queue.isEmpty()){
TreeNode temp = queue.poll();
al.add(temp.val);
start++;
if(temp.left!=null)
queue.offer(temp.left);
if(temp.right!=null)
queue.offer(temp.right);
if(start==end){
result.add(al);
start=0;
end = queue.size();
al = new ArrayList<Integer>();
}
}
return result;
}
}