[剑指offer][JAVA]面试题第[32-1]题[从上到下打印二叉树][BFS]
【问题描述】[中等]
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印。
例如:
给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7
返回:[3,9,20,15,7]
【解答思路】
BFS
时间复杂度:O(N) 空间复杂度:O(N)
class Solution {public int[] levelOrder(TreeNode root) {if(root == null) return new int[0];// Queue<TreeNode> queue= new LinkedList<>();//queue.add(root);Queue<TreeNode> queue = new LinkedList<>(){{ add(root); }};ArrayList<Integer> ans = new ArrayList<>();while(!queue.isEmpty()) {TreeNode node = queue.poll();ans.add(node.val);if(node.left != null) queue.add(node.left);if(node.right != null) queue.add(node.right);}int[] res = new int[ans.size()];for(int i = 0; i < ans.size(); i++)res[i] = ans.get(i);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-lcof/solution/mian-shi-ti-32-i-cong-shang-dao-xia-da-yin-er-ch-4/
[剑指offer][JAVA]面试题第[32-1]题[从上到下打印二叉树][BFS]相关推荐
- [剑指offer][JAVA]面试题第[32-3]题[从上到下打印二叉树 ][BFS]
[问题描述][中等] 请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3 ...
- [剑指offer][JAVA]面试题第[32-2]题[从上到下打印二叉树][BFS]
[问题描述][简单] 从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行.例如: 给定二叉树: [3,9,20,null,null,15,7],3/ \9 20/ \15 7 ...
- 【剑指offer】面试题32 - I:从上到下打印二叉树(Java)
从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ ...
- 【剑指offer】面试题32 - III:从上到下打印二叉树 III(Java)
请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推. 例如: 给定二叉树: [3,9,20,null, ...
- 【剑指offer】面试题32 - II:从上到下打印二叉树 II(Java)
从上到下按层打印二叉树,同一层的节点按从左到右的顺序打印,每一层打印到一行. 例如: 给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ ...
- [剑指offer][JAVA]面试题第[31]题[栈的压入、弹出序列][栈]
[问题描述][中等] 输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序.假设压入栈的所有数字均不相等.例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4 ...
- [剑指offer][JAVA]面试题第[16]题[数值的整数次方][位运算][二分法]
[问题描述][中等] 实现函数double Power(double base, int exponent),求base的exponent次方.不得使用库函数,同时不需要考虑大数问题.示例 1:输入: ...
- [剑指offer][JAVA]面试题[51][数组中的逆序对][归并排序]
[问题描述]面试题51.数组中的逆序对 (困难) 在数组中的两个数字,如果前面一个数字大于后面的数字,则这两个数字组成一个逆序对.输入一个数组,求出这个数组中的逆序对的总数. 示例 1:输入: [7, ...
- 【博客搬家旧文】剑指offer [ java ] 面试题10 斐波那契数列
契波那契数列最常见的解法,递归如下: public class Solution {public int Fibonacci(int n) {if(n == 0)return 0;else if(n ...
最新文章
- 【阿里聚安全·安全周刊】Intel芯片级安全漏洞事件|macOS存在漏洞
- 自适应采样非局部神经网络的点云鲁棒操作
- [BUUCTF-pwn]——wustctf2020_getshell_2
- shell脚本每日一练(一)
- 【2018.4.7】模拟赛之三-ssl2384 字符串【字符串】
- Angular15 利用ng2-file-upload实现文件上传
- 内核使用硬件ip的dma,dma_alloc_coherent 与 dma_alloc_writecombine (转)
- 上海找python工作容易吗_Python 在上海什么程度才能找到工作?
- 为什么要把id存到redis的key中_干货|mysql:exists还是in?哪个性能好?为什么?
- 使用Highcharts实现柱状图展示
- js如何判断访问来源是来自搜索引擎(蜘蛛人)还是直接访问
- 第3章 排列清单控制标记
- [Vani有约会]雨天的尾巴(树上差分+线段树合并)
- c++_String一些使用记录
- 【Robot 学习1】 机器人平台搭建
- 继承ActionSupport例子展示
- win10 修改git账号密码
- HTML_炫酷的按钮样式
- UE4 Pak包热更新
- 新浪企业邮箱服务器怎么设置,新浪企业邮箱如何在Iphone设置邮箱账号
热门文章
- 【转】Xcode 7 真机调试详细步骤
- CentOS 更改MySQL数据库目录位置
- 条款9:避免隐藏标准形式的new
- 在虚拟机中安装和配配置 MOSS2007 全过程
- 1.怎样定制VC#DataGrid列标题?
- Spring Cloud 采用Consul做配置中心
- mysql约束教程,MySQL 约束
- mysql myisam/innodb高并发优化经验_MySQL MyISAM / PHP 高并发优化经验
- 中国微型计算机分省市产量数据统计,2017年6月中国微型计算机设备产量统计数据分析...
- LeetCode 三数之和 — 优化解法