题目
分析

代码一
使用队列
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;}
