【问题描述】[简单]


从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行。例如:
给定二叉树: [3,9,20,null,null,15,7],3/ \9  20/  \15   7
返回其层次遍历结果:[[3],[9,20],[15,7]
]

【解答思路】

层次遍历 BFS


时间复杂度:O(N) 空间复杂度:O(N)

  public List<List<Integer>> levelOrder(TreeNode root) {Queue<TreeNode> queue = new LinkedList<>();//与32-1 不同之处List<List<Integer>> res = new ArrayList<>();if(root != null){queue.add(root);}while(!queue.isEmpty()) {List<Integer> tmp = new ArrayList<>();for(int i=queue.size(); i>0;i-- ){TreeNode node = queue.poll();tmp.add(node.val);if(node.left!=null){queue.add(node.left);}if(node.right!=null){queue.add(node.right);}}res.add(tmp);}return res;}

【总结】

1.细节

1.1 Queue
新建

  // Queue<TreeNode> queue=  new LinkedList<>();//queue.add(root);Queue<TreeNode> queue = new LinkedList<>(){{ add(root); }};

入队出队 add(x) poll()

1.2 ArrayList
新建
ArrayList ans = new ArrayList<>();
长度 size()
获取元素 get(i)

2. Queue


Queue是在两端出入的List,所以也可以用数组或链表来实现。

  • add 增加一个元索 如果队列已满,则抛出一个IIIegaISlabEepeplian异常
  • remove 移除并返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
  • element 返回队列头部的元素 如果队列为空,则抛出一个NoSuchElementException异常
  • offer 添加一个元素并返回true 如果队列已满,则返回false
  • poll 移除并返问队列头部的元素 如果队列为空,则返回null
  • peek 返回队列头部的元素 如果队列为空,则返回null
  • put 添加一个元素 如果队列满,则阻塞
  • take 移除并返回队列头部的元素 如果队列为空,则阻塞
注意
  • remove、element、offer 、poll、peek 其实是属于Queue接口。

  • add remove element操作在队满或者队空的时候会报异常。

  • offer poll peek 在队满或者队空的时候不会报异常。

  • put take操作属于阻塞操作。队满队空均会阻塞。

3.LinkedList
  • 以双向链表实现的LinkedList既是List,也是Queue。
  • 它是唯一一个允许放入null的Queue。
4.BFS 层次遍历 队列实现

转载链接:https://leetcode-cn.com/problems/cong-shang-dao-xia-da-yin-er-cha-shu-ii-lcof/solution/mian-shi-ti-32-ii-cong-shang-dao-xia-da-yin-er-c-5/

[剑指offer][JAVA]面试题第[32-2]题[从上到下打印二叉树][BFS]相关推荐

  1. [剑指offer][JAVA]面试题第[32-1]题[从上到下打印二叉树][BFS]

    [问题描述][中等] 从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7 返回: ...

  2. [剑指offer][JAVA]面试题第[32-3]题[从上到下打印二叉树 ][BFS]

    [问题描述][中等] 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3 ...

  3. 【剑指offer】面试题32 - I:从上到下打印二叉树(Java)

    从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3    / \   9  20     /  \     ...

  4. 【剑指offer】面试题32 - III:从上到下打印二叉树 III(Java)

    请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20,null, ...

  5. 【剑指offer】面试题32 - II:从上到下打印二叉树 II(Java)

    从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3    / \   9  20     /  \ ...

  6. [剑指offer][JAVA]面试题第[31]题[栈的压入、弹出序列][栈]

    [问题描述][中等] 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4 ...

  7. [剑指offer][JAVA]面试题第[16]题[数值的整数次方][位运算][二分法]

    [问题描述][中等] 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题.示例 1:输入: ...

  8. [剑指offer][JAVA]面试题[51][数组中的逆序对][归并排序]

    [问题描述]面试题51.数组中的逆序对 (困难) 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1:输入: [7, ...

  9. 【博客搬家旧文】剑指offer [ java ] 面试题10 斐波那契数列

    契波那契数列最常见的解法,递归如下: public class Solution {public int Fibonacci(int n) {if(n == 0)return 0;else if(n ...

最新文章

  1. 20170215学习计划
  2. 全排列:不含重复元素和含重复元素的全排列
  3. python画图三维-对python mayavi三维绘图的实现详解
  4. aspnetpager分页,不使用存储过程
  5. HtmlUnit解析动态网页并采集网页列表到Excel
  6. echarts——父元素宽度100%,但canvas宽度100px
  7. 深度学总结:CNN Decoder, Upsampling的处理
  8. 微信小程序最常用的布局——Flex布局
  9. HDU3788 ZOJ问题
  10. 消融实验——Ablation experiment
  11. [WP8.1UI控件编程]Windows Phone XAML页面的编译
  12. 『C#基础』多线程笔记「一」基本说明
  13. cad2019菜单栏怎么调出来_AutoCAD2019怎么把工具栏放左右两边两侧工具栏调出来
  14. 酒店客房管理系统源代码 java_《宾馆客房管理系统》JAVA源代码
  15. 微信好友排行榜 最简教程 二
  16. uniapp实现音视频通讯
  17. FHQ大战Splay
  18. 嵌入式软件工程师—成长笔记#01
  19. 设置控件的视觉效果(Win32)
  20. Intel x87 FPU的使用基础

热门文章

  1. ASP.NET学习笔记之操作过滤器
  2. attribute 扩展
  3. IP过滤-驱动和应用程序通信
  4. linux下带密码的scp,linux下带密码的scp
  5. Spring Boot 2.3 版本变化[翻译]
  6. 深入浅出JVM-内存模型
  7. Android 换肤demo,轻量快捷接入集成,判断是否夜间模式
  8. java使用AntPathMatcher进行uri匹配
  9. oracle 创建新库时报错:enterprise manager 配置失败
  10. 重建AD域控制器的DNS服务器