从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路:这个题跟它的前一题“把二叉树按照z字型逐层打印”做法基本一致。因为这个是从左到右打印,我们考虑使用队列,队列是先进先出。同样的也是两个队列,一个指向当前打印层,一个记录下一层的节点。当当前层打印完毕之后,把当前层指向下一层。下一层清空后来记录下一层的子节点
代码:
ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> list=new ArrayList<>(); if(pRoot==null) return list; //用于打印当前层 Queue<TreeNode> queue1=new LinkedBlockingQueue<>(); //用于记录下一层 Queue<TreeNode> queue2=new LinkedBlockingQueue<>(); queue1.add(pRoot); //用于记录当前处于第几层 ArrayList<Integer> temp=new ArrayList<>(); while (!queue1.isEmpty()){ TreeNode node=queue1.poll(); temp.add(node.val); //因为队列是先进先出的,从左到右打印,所以先压左节点,后压右节点 if(node.left!=null) queue2.add(node.left); if(node.right!=null) queue2.add(node.right); //queu1为空,表示当前层已经打印完了 if(queue1.isEmpty()){ //打印层指向下一层 queue1=queue2; //记录下一层的清空。 queue2=new LinkedBlockingQueue<>(); list.add(temp); temp=new ArrayList<>(); } } return list; }