题目
分析

代码一
使用队列
public ArrayList<Integer> TopToBottom(TreeNode root) {
ArrayList<Integer> arr = new ArrayList<Integer>();//创建一个list用来存放队列取出来的值
Deque<TreeNode> queue = new LinkedList<TreeNode>();//利用队列可以将每层的节点放入队列中,然后每一次循环都
if(root==null)return null;
queue.offer(root);
while(!queue.isEmpty())
{
TreeNode node = queue.poll();
arr.add(node.val);
if(node.left!=null)queue.offer(node.left);//自顶向下,自左向右加在末尾
if(node.right!=null)queue.offer(node.right);
}
return arr;
}
代码二
使用list来代替队列
public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
ArrayList<Integer> list = new ArrayList<>();
ArrayList<TreeNode> queue = new ArrayList<>();
if (root == null) {
return list;
}
queue.add(root);
while (queue.size() != 0) {
TreeNode temp = queue.remove(0);
if (temp.left != null){
queue.add(temp.left);
}
if (temp.right != null) {
queue.add(temp.right);
}
list.add(temp.val);
}
return list;
}