题目

从上往下打印出二叉树的每个节点,同层节点从左至右打印。

分析
第二十二题 从上往下打印二叉树 - 图2

代码一

使用队列

  1. public ArrayList<Integer> TopToBottom(TreeNode root) {
  2. ArrayList<Integer> arr = new ArrayList<Integer>();//创建一个list用来存放队列取出来的值
  3. Deque<TreeNode> queue = new LinkedList<TreeNode>();//利用队列可以将每层的节点放入队列中,然后每一次循环都
  4. if(root==null)return null;
  5. queue.offer(root);
  6. while(!queue.isEmpty())
  7. {
  8. TreeNode node = queue.poll();
  9. arr.add(node.val);
  10. if(node.left!=null)queue.offer(node.left);//自顶向下,自左向右加在末尾
  11. if(node.right!=null)queue.offer(node.right);
  12. }
  13. return arr;
  14. }

代码二

使用list来代替队列

  1. public ArrayList<Integer> PrintFromTopToBottom(TreeNode root) {
  2. ArrayList<Integer> list = new ArrayList<>();
  3. ArrayList<TreeNode> queue = new ArrayList<>();
  4. if (root == null) {
  5. return list;
  6. }
  7. queue.add(root);
  8. while (queue.size() != 0) {
  9. TreeNode temp = queue.remove(0);
  10. if (temp.left != null){
  11. queue.add(temp.left);
  12. }
  13. if (temp.right != null) {
  14. queue.add(temp.right);
  15. }
  16. list.add(temp.val);
  17. }
  18. return list;
  19. }