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

思路:原型为层次遍历,因为要每一行换行输出,所以需要知道每一行多少元素。可以采用一个队列+两个状态变量的思路。打印每一层前,每行元素的个数为当前队列内元素的个数,并重置起始变量为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;
    }
    
}