从上到下按层打印二叉树,同一层结点从左至右输出。每一层输出一行。
解题思路:
利用队列来进行实现,首先要知道队列的方法
下表显示了jdk1.5中的阻塞队列的操作:
arraylist的方法
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常 element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
linkedlist的方法 offer 添加一个元素并返回true 如果队列已满,则返回false poll 移除并返问队列头部的元素 如果队列为空,则返回null peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞 take 移除并返回队列头部的元素 如果队列为空,则阻塞
import java.util.ArrayList; import java.util.Queue; import java.util.LinkedList; /* public class TreeNode { int val = 0; TreeNode left = null; TreeNode right = null; public TreeNode(int val) { this.val = val; } } */ public class Solution { ArrayList<ArrayList<Integer> > Print(TreeNode pRoot) { ArrayList<ArrayList<Integer>> List = new ArrayList<ArrayList<Integer> >(); Queue <TreeNode> queue = new LinkedList<> (); if(pRoot==null) return List; queue.offer(pRoot); while(!queue.isEmpty()) { int size=queue.size(); ArrayList<Integer> list = new ArrayList<>(); while(size>0) { TreeNode node = queue.poll(); list.add(node.val); if(node.left!=null) queue.offer(node.left); if(node.right!=null) queue.offer(node.right); size--; } List.add(list); } return List; } }
