当前位置:网站首页 > 编程语言 > 正文

广度优先搜索怎么遍历(广度优先搜索遍历树怎么遍历)



这一系列博客的创作初衷是为了记录自己在刷题过程中对于一些比较经典的并且很哇塞的题型的所思所想,巩固所学,即时复盘。 正因为是为了便于自己复盘,所以大多是以自己的思维模式书写。如果小伙伴们在阅读的时候发现什么错误、对内容有疑问以及对书写排版等有改进意见的话,请评论区留言指正!

剑指 Offer 32 - I. 从上到下打印二叉树

  (1)题目中要求的“从上到下打印出二叉树的每个节点,同一层的节点按照从左到右的顺序打印”,也就是层序遍历的内容。有别于树的遍历中的 前序、中序以及后续遍历中使用的深度优先搜索,这里实现树的层序遍历利用的是 广度优先搜索
  (2)实现树的层序遍历具体的做法是维护一个队列 和一个答案容器 :队列用来存放树的节点,答案容器用来存放最终的输出答案。完成好准备工作之后,进行如下操作

  • 首先把根节点存入队列 ;
  • 队列只要不为空就一直循环读取队列中的队首元素:
      当前读取的队首元素存入 ,当当前读取的队首元素还有子节点的话依次把左子节点、右子节点存入队列;

  (3)可能会有读者有这样的疑问,对于二叉树我们知道有左子树和右子树,如果是 N叉树 的情况,如何知道该树有几个子节点呢?这个就要看树的结构了,一般在答题区域都会有已经实现了的结构体或类了。可以参照 LeetCode 429. N 叉树的层序遍历 中答题区域的 N叉树 数据结构的实现。

 
  

例子看完了,相信大家对这个题目以及 广度优先搜索——层序遍历 已经有了初步的认识了。现在我们来详细解读一下广度优先搜索和层序遍历。

维基百科 广度优先搜索算法 (英语:Breadth-First Search,缩写为BFS),又译作 宽度优先搜索 ,或 横向优先搜索 ,是一种图形搜索算法。简单的说,BFS是从根节点开始,沿着树的宽度遍历树的节点。如果所有节点均被访问,则算法中止。广度优先搜索的实现一般采用open-closed表。

在下图所示的广度优先搜索的示例图中:坐标(1,2)处有一个“小人”,可以向左、右、上、下四个方向移动,每次移动仅可以沿着一个方向移动一格。每一个方格内都一个数字,表示“小人”行走到该方格内所需的行动步数。数值相同的方格表示这些方格处于同一层中。通过某一方格向外扩散实现“小人”行走到任意方格的目的。该图是一个典型的广度优先搜索的例子。

广度优先搜索示意图

层序遍历: 是树众多遍历算法中的一种,树的遍历方法有前序遍历、中序遍历、后续遍历和层序遍历等等。
以上提及的遍历方法的定义以及求解方法见下表所示:

项目 含义(以二叉树为例) 方法 层序遍历 按层对树进行遍历,每一层从左往右依次遍历 BFS 前序遍历 按照先跟节点再左子节点,最后再遍历右子节点的顺序对一棵树进行遍历 DFS 中序遍历 按照先左子节点再根节点,最后再遍历右子节点的顺序对一棵树进行遍历 DFS 后续遍历 按照先左子节点再右子节点,最后再遍历根节点的顺序对一棵树进行遍历 DFS

通过做一些广搜类和深搜类的算法题目,我们可以发现:

  • 对于深搜类的题目会用到 这种数据结构(有些题目会使用 容器来代替);
  • 对于广搜类的题目,我们会使用到 队列 这种数据结构,有时候也会使用 优先队列 这种数据结构
  • 深搜要一头扎到底,从树的根节点一直扎到叶子节点,然后再慢慢的回溯,这就会涉及到 后入先出 的问题,具体的在 深度优先搜索 的章节再细讲。
  • 广度优先搜索,广搜从树的根节点开始,沿着树的宽度方向开始搜索,依次加入当前层的各个子节点,然后再依次读取各个子节点的子节点。直到队列为空,结束循环。
    以例子中的二叉树为例:
    入队出队模拟




通过以上的分析,可以发现熟知 队列 的相关操作是十分必要的。
参照 四、总结(4)回顾队列知识。

题号 难度 剑指 Offer 32 - I. 从上到下打印二叉树 中等 剑指 Offer 32 - II. 从上到下打印二叉树 II 简单 剑指 Offer 32 - III. 从上到下打印二叉树 III 中等 429. N 叉树的层序遍历 中等
到此这篇广度优先搜索怎么遍历(广度优先搜索遍历树怎么遍历)的文章就介绍到这了,更多相关内容请继续浏览下面的相关推荐文章,希望大家都能在编程的领域有一番成就!

版权声明


相关文章:

  • xp虚拟机安卓版(安卓运行xp虚拟机)2026-05-23 18:36:05
  • 手机本机信息(手机本机信息包括什么)2026-05-23 18:36:05
  • pfna是什么材质(pfna是什么材料做的)2026-05-23 18:36:05
  • keil破解工具(破解keil5)2026-05-23 18:36:05
  • 网址查询ip域名解析(网址查询ip域名解析失败)2026-05-23 18:36:05
  • tp9930芯片(tp9345芯片)2026-05-23 18:36:05
  • 耳机蓝牙地址(耳机蓝牙地址查询)2026-05-23 18:36:05
  • 硬盘虚拟u盘(u盘虚拟内存什么意思)2026-05-23 18:36:05
  • m301h 参数(新魔百盒m301h参数)2026-05-23 18:36:05
  • 程序员培训班(程序员培训班一般多少钱)2026-05-23 18:36:05
  • 全屏图片