文章目录

  • 使用树理解深度优先和广度优先
  • 层次遍历分析
  • 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层的数据---------------------------------------

我们逐步来分析一下

  1. 根节点不为空的话,将根节点5入队
  2. 访问根节点5 ,然后将 5 的 左右孩子 3 和 6 入队 --------> 5
  3. 访问左孩子3 ,这个时候判断下 3是否有左右孩子,有的话将2和4 入队 ------>5 3
  4. 这个时候队列中有 6 、2、4 ,访问6 ------> 5 3 6
  5. 看下6的左右孩子,有的话入队,这个时候队列中有 2 、4 、8
  6. 访问 2 ,看下2还有没有左右孩子,没有 ------> 5 3 6 2
  7. 访问 4 看下4 还有没有左右孩子,没有 ------> 5 3 6 2 4
  8. 访问 8 看下8 还有没有左右孩子,没有 ------> 5 3 6 2 4 8
  9. 整个队列为空,广度优先遍历结束。

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_二叉树的层次遍历(广度优先)相关推荐

  1. 二叉树的层次遍历_【腾讯面试热身题】二叉树层次遍历(动画展示)

    二叉树的层次遍历同时涉及到树和队列两种数据结构的操作,因此大厂很喜欢用来作为面试的热身题.作者不少去腾讯的小伙伴,都反映,这种题一定要非常熟练,不然会被直接pass. 1 题目描述 给定一个二叉树,按 ...

  2. 关于二叉树的层次遍历的花样(c++实现)

    花样变形1::二叉树层次遍历但是分层打印 分析:与普通打印多了一个分层打印,其实只要在在层次遍历中多设置一个标记变量即可 代码如下: //二叉树的层次遍历 void levelTravel(BTNod ...

  3. leetcode-102 二叉树的层次遍历

    给定一个二叉树,返回其按层次遍历的节点值. (即逐层地,从左到右访问所有节点). 例如: 给定二叉树: [3,9,20,null,null,15,7] 3 / \ 9 20 / \ 15 7 返回其层 ...

  4. 【每日一算法】二叉树的层次遍历 II

    每日一算法-二叉树的层次遍历 II 题目 给定一个二叉树,返回其节点值自底向上的层次遍历. (即按从叶子节点所在层到根节点所在的层,逐层从左向右遍历) 例如: 给定二叉树 [3,9,20,null,n ...

  5. c++根据二叉树的层次遍历建立二叉树_LeetCode | 102.二叉树的层次遍历

    这次来写一下 LeetCode 的第 102 题,二叉树的层次遍历. 题目描述 题目直接从 LeetCode 上截图过来,题目如下: 102.二叉树的层次遍历题目 上面的题就是 二叉树的层次遍历 题目 ...

  6. 七十七、 二叉树的层次遍历和最大深度

    @Author:Runsen 在讲解二叉树的时候,提到二叉树的遍历除了前中后序遍历,还有层次遍历. 前中后序这三种遍历方法以及可以通过递归的方式实现了,那么今天就来讲讲层次遍历吧! 文章目录 Leet ...

  7. 数据结构——二叉树的层次遍历进阶

    之前的一个博客 数据结构--二叉树的层次遍历看完这个,可以简单实现下面的问题 问题: 1.计算二叉树的最大宽度(二叉树的最大宽度是指二叉树所有层中结点个数的最大值. 2.用按层次顺序遍历二叉树的方法, ...

  8. 69. 二叉树的层次遍历Python实现

    '''69. 二叉树的层次遍历 描述 给出一棵二叉树,返回其节点值的层次遍历(逐层从左往右访问)您在真实的面试中是否遇到过这个题? 样例 给一棵二叉树 {3,9,20,#,#,15,7} :3/ \ ...

  9. 二叉树层次遍历c语言_每日一道 LeetCode (23):二叉树的层次遍历 II

    ❝ 每天 3 分钟,走上算法的逆袭之路. ❞ 前文合集 每日一道 LeetCode 前文合集 代码仓库 GitHub:https://github.com/meteor1993/LeetCode Gi ...

最新文章

  1. 1.3 单一数字评估指标-深度学习第三课《结构化机器学习项目》-Stanford吴恩达教授
  2. 关于synchronize与lock的区别
  3. 联合国粮农组织总干事屈冬玉 对话国际农民丰收节贸易会
  4. [转载]Java数据库设计中的14个技巧
  5. linux弹性网卡,将弹性网卡附加到 ECS 实例上之后如何配置弹性网卡
  6. 5G(6 )---5G NR 物理层 索引
  7. qt5 linux apt get,Ubuntu 14.04下安装并配置Qt5.7.0
  8. Hibernate(一)——采用Hibernate框架开发环境搭建
  9. 三个瓶盖能换一瓶水,问100个人需要喝水,最少需要买多少瓶水即可解决100人的喝水问题
  10. 【ICPC 2021网络赛2】The 2021 ICPC Asia Regionals Online Contest (II)签到题5题
  11. 《搭建Centos7之一》
  12. 揭秘井井有条的流水线(ZooKeeper 原理篇)
  13. HTML制作简易个人简历(表单)
  14. C语言实现移位密码算法,仿射密码算法
  15. grep、cut、sed、awk
  16. linux系统怎么禁用键盘,Linux之禁用笔记本键盘
  17. Linux下使用Netfilter框架编写内核模块(统计协议层ping特定地址丢包数)
  18. Science Advances:社会和健康科学中用于描述、预测和因果推理的机器学习方法
  19. 读美妆论文AN AUTOMATIC FRAMEWORK FOR EXAMPLE-BASED VIRTUAL MAKEUP
  20. layui table 改变列表字体颜色

热门文章

  1. java swing removeall_Java Swing Combobox removeAllItems调用ItemStateChange...
  2. ks检验正态分布结果_统计学里的数据正态性检验
  3. 强化学习笔记: MDP - Policy iteration
  4. tableau可视化函数使用案例(六十六)-Tableau折线图作图方法(凹凸图、弧线图和雷达图)
  5. tableau必知必会之学做常用的倾斜图(slopegraph)
  6. Python安装、配置图文详解
  7. ei会议论文录用但不参加会议_会议论文有录用通知吗
  8. Python入门100题 | 第013题
  9. 如何版本化你的API?--转
  10. MYSQL存储过程中 使用变量 做表名--转