题目描述
从上往下打印出二叉树的每个节点,同层节点从左至右打印。
分析
即二叉树的层次遍历
借助队列实现
代码
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> result = new ArrayList<>();
if(root==null){
return result;
}
Queue<TreeNode> queue = new LinkedList<>();
queue.offer(root);
while(!queue.isEmpty())
{
TreeNode temp = queue.poll();
if(temp.left!=null)
{
queue.add(temp.left);
}
if(temp.right!=null)
{
queue.add(temp.right);
}
result.add(temp.val);
}
return result;
}
}
注意:要判断root==null情况,不然会只通过80%
队列的操作方法
Queue是一个接口,不可以直接new,需要new一个具体的实现类
jdk1.5中的阻塞队列的操作:
方法 | 描述 | 备注 |
---|---|---|
add | 增加一个元索 | 如果队列已满,则抛出一个IIIegaISlabEepeplian异常 |
remove | 移除并返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
element | 返回队列头部的元素 | 如果队列为空,则抛出一个NoSuchElementException异常 |
offer | 添加一个元素并返回true | 如果队列已满,则返回false |
poll | 移除并返问队列头部的元素 | 如果队列为空,则返回null |
peek | 返回队列头部的元素 | 如果队列为空,则返回null |
put | 添加一个元素 | 如果队列满,则阻塞 |
take | 移除并返回队列头部的元素 | 如果队列为空,则阻塞 |