- 题目描述:
从上往下打印出二叉树的每个节点,同层节点从左至右打印。 - 分析:
相当于树的层次遍历,借助队列实现。 - 代码:
import java.util.Queue;
import java.util.ArrayList;
import java.util.LinkedList;
public class Solution {
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<Integer>();
if(root == null)
return list;
Queue<TreeNode> queue = new LinkedList<TreeNode>();
queue.add(root); //也可以offer()函数
while(!queue.isEmpty()){
TreeNode treeNode = queue.remove(); //也可以poll()函数
if(treeNode.left != null)
queue.add(treeNode.left);
if(treeNode.right != null)
queue.add(treeNode.right);
list.add(treeNode.val);
}
return list;
}
}
树结构:
public class TreeNode {
int val = 0;
TreeNode left = null;
TreeNode right = null;
public TreeNode(int val) {
this.val = val;
}
}
队列一些操作实现:
add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
offer 添加一个元素并返回true 如果队列已满,则返回false
poll 移除并返问队列头部的元素 如果队列为空,则返回null
peek 返回队列头部的元素 如果队列为空,则返回null
put 添加一个元素 如果队列满,则阻塞
take 移除并返回队列头部的元素