Algorithms_二叉树的层次遍历(广度优先)
文章目录
- 使用树理解深度优先和广度优先
- 层次遍历分析
- Code
使用树理解深度优先和广度优先
我们上篇博文中 Algorithms_二叉树的前序遍历、中序遍历、后续遍历(深度优先) ,本质上是深度优先。 为什么这么说呢? 我们来看下
5 / \ 3 6 / \ \ 2 4 8
前序遍历: 5 、3、2、4、6、8
中序遍历: 2、3、4、5、6、8
后序遍历 : 2、4、3、8、6、5
不管是前序、中序还是后序都会先把左子树遍历到没有元素,然后再遍历右子树到没有元素, 都是先顺着一个枝杈往最深的地方走。
而层次遍历呢? (广度优先)
5 先遍历第0层的数据--------------------------------------- / \ 3 6 然后遍历第1层的数据---------------------------------------/ \ \ 2 4 8 再遍历第2层的数据---------------------------------------
层次遍历的输出如下: 5、3、6、2、4、8
我们遍历的数据使用逐层遍历的方式,本质上是一种广度优先的遍历。
层次遍历分析
层次遍历的方式,通常使用的不是递归的方式来实现的,一般都会借用队列。 从根节点开始排着队的进入到队列中
5 先遍历第0层的数据--------------------------------------- / \ 3 6 然后遍历第1层的数据---------------------------------------/ \ \ 2 4 8 再遍历第2层的数据---------------------------------------
我们逐步来分析一下
- 根节点不为空的话,将根节点5入队
- 访问根节点5 ,然后将 5 的 左右孩子 3 和 6 入队 --------> 5
- 访问左孩子3 ,这个时候判断下 3是否有左右孩子,有的话将2和4 入队 ------>5 3
- 这个时候队列中有 6 、2、4 ,访问6 ------> 5 3 6
- 看下6的左右孩子,有的话入队,这个时候队列中有 2 、4 、8
- 访问 2 ,看下2还有没有左右孩子,没有 ------> 5 3 6 2
- 访问 4 看下4 还有没有左右孩子,没有 ------> 5 3 6 2 4
- 访问 8 看下8 还有没有左右孩子,没有 ------> 5 3 6 2 4 8
- 整个队列为空,广度优先遍历结束。
Code
/*** * * @Title: levelScan* * @Description: 二分搜索树的层序遍历* * * @return: void*/public void levelScan() {Queue<Node> queue = new LinkedList<>();queue.offer(root);// 把root入队while (!queue.isEmpty()) {Node currentNode = queue.remove();// 移除并返回System.out.println(currentNode.e);if (currentNode.left != null) {queue.add(currentNode.left);}if (currentNode.right != null) {queue.add(currentNode.right);}}}
测试下
public static void main(String[] args) {BinarySearchTree<Integer> bst = new BinarySearchTree<>();int[] nums = { 5, 3, 6, 8, 4, 2 };for (int num : nums) {bst.add(num);}// bst.preOrder();// System.out.println("============================");// bst.preOrderNR();// System.out.println("============================");bst.levelScan();}
Algorithms_二叉树的层次遍历(广度优先)相关推荐
- 二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)
二叉树的层次遍历同时涉及到树和队列两种数据结构的操作,因此大厂很喜欢用来作为面试的热身题.作者不少去腾讯的小伙伴,都反映,这种题一定要非常熟练,不然会被直接pass. 1 题目描述 给定一个二叉树,按 ...
- 关于二叉树的层次遍历的花样(c++实现)
花样变形1::二叉树层次遍历但是分层打印 分析:与普通打印多了一个分层打印,其实只要在在层次遍历中多设置一个标记变量即可 代码如下: //二叉树的层次遍历 void levelTravel(BTNod ...
- leetcode-102 二叉树的层次遍历
给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回其层 ...
- 【每日一算法】二叉树的层次遍历 II
每日一算法-二叉树的层次遍历 II 题目 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,n ...
- c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历
这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 102.二叉树的层次遍历题目 上面的题就是 二叉树的层次遍历 题目 ...
- 七十七、 二叉树的层次遍历和最大深度
@Author:Runsen 在讲解二叉树的时候,提到二叉树的遍历除了前中后序遍历,还有层次遍历. 前中后序这三种遍历方法以及可以通过递归的方式实现了,那么今天就来讲讲层次遍历吧! 文章目录 Leet ...
- 数据结构——二叉树的层次遍历进阶
之前的一个博客 数据结构--二叉树的层次遍历看完这个,可以简单实现下面的问题 问题: 1.计算二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值. 2.用按层次顺序遍历二叉树的方法, ...
- 69. 二叉树的层次遍历Python实现
'''69. 二叉树的层次遍历 描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? 样例 给一棵二叉树 {3,9,20,#,#,15,7} :3/ \ ...
- 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II
❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...
最新文章
- 1.3 单一数字评估指标-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
- 关于synchronize与lock的区别
- 联合国粮农组织总干事屈冬玉 对话国际农民丰收节贸易会
- [转载]Java数据库设计中的14个技巧
- linux弹性网卡,将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡
- 5G(6 )---5G NR 物理层 索引
- qt5 linux apt get,Ubuntu 14.04下安装并配置Qt5.7.0
- Hibernate(一)——采用Hibernate框架开发环境搭建
- 三个瓶盖能换一瓶水,问100个人需要喝水,最少需要买多少瓶水即可解决100人的喝水问题
- 【ICPC 2021网络赛2】The 2021 ICPC Asia Regionals Online Contest (II)签到题5题
- 《搭建Centos7之一》
- 揭秘井井有条的流水线(ZooKeeper 原理篇)
- HTML制作简易个人简历(表单)
- C语言实现移位密码算法,仿射密码算法
- grep、cut、sed、awk
- linux系统怎么禁用键盘,Linux之禁用笔记本键盘
- Linux下使用Netfilter框架编写内核模块(统计协议层ping特定地址丢包数)
- Science Advances:社会和健康科学中用于描述、预测和因果推理的机器学习方法
- 读美妆论文AN AUTOMATIC FRAMEWORK FOR EXAMPLE-BASED VIRTUAL MAKEUP
- layui table 改变列表字体颜色
热门文章
- java swing removeall_Java Swing Combobox removeAllItems调用ItemStateChange...
- ks检验正态分布结果_统计学里的数据正态性检验
- 强化学习笔记: MDP - Policy iteration
- tableau可视化函数使用案例(六十六)-Tableau折线图作图方法(凹凸图、弧线图和雷达图)
- tableau必知必会之学做常用的倾斜图(slopegraph)
- Python安装、配置图文详解
- ei会议论文录用但不参加会议_会议论文有录用通知吗
- Python入门100题 | 第013题
- 如何版本化你的API?--转
- MYSQL存储过程中 使用变量 做表名--转