【问题标题】:Breadth First Search Traversal VS Pre-order Traversal VS Depth First Search Traversal广度优先搜索遍历 VS 预序遍历 VS 深度优先搜索遍历
【发布时间】:2019-08-10 02:30:43
【问题描述】:

对于二叉树,广度优先搜索遍历(BFS)是否与前序遍历相同?我对这两种不同类型的遍历有点困惑。谁能给我解释一下?此外,预购遍历深度优先搜索遍历(DFS)相比如何?

非常感谢!

【问题讨论】:

  • 感谢您为了其他用户的利益修改我的问题!

标签: binary-tree breadth-first-search tree-traversal preorder


【解决方案1】:

DFS 类型有 pre-order 、 in-order 和 post-order ;

DFS 就像 - 先去找我的后代(grand-grand-..child),然后我会看到我的兄弟姐妹的后代。 BFS 就像 - 先去找我的兄弟姐妹,然后是他们的孩子,然后是他们的孩子,依此类推。

图遍历一般采用前序DFS技术。

只在二叉树中按顺序遍历。(树是一种特殊的图)

在树的情况下,BFS 是一个级别顺序遍历。

这四种是不同的遍历技术,结果也是 不同的。 有时他们的结果可能相同,所以不要混淆,检查不同的树,你会发现不同。

【讨论】:

  • 我认为在上面的答案中后序遍历是不正确的,正确的后序遍历是:4,5,2,6,7,3,1
【解决方案2】:

不,前序遍历实际上是深度优先搜索 (DFS) 遍历的一种形式。 DFS有三种不同的形式,分别是:

  1. 预购
  2. 按顺序
  3. 后订购

为了证明广度优先搜索 (BFS) 遍历与前序遍历不同我将在下面展示一个反例

明确二叉树与二叉搜索树不同,即二叉树可以定义为:

二叉树 - 元素最多有 2 个孩子的树称为二叉树。请注意,这里没有提到孩子的顺序。

现在来看反例,采用以下简单的二叉树:

对于前序遍历,节点按以下顺序访问: 预购: [1,2,4,3]

现在对于广度优先搜索遍历,节点按以下顺序访问:

BFS: [1,2,3,4]

注意:前序遍历不同于BFS遍历。

有关不同树遍历的更多信息,请查看link

希望对您有所帮助!

【讨论】:

  • 很好的答案。此外,可能有助于可视化差异的一点是,预购搜索通常使用 Stack 数据结构实现,而 BFS 通常使用 Queue。这是因为 BFS 优先考虑节点邻居,而预排序 DFS 优先考虑节点子节点。
  • @ifiore 谢谢,是的,你是对的 :) DFS 使用堆栈,BFS 使用队列来实现其底层实现。
  • 谢谢!但是直到我阅读了您的答案,我才意识到我的问题错了。我的正确问题是 DFT 与预购遍历相同吗?
  • 是的,前序遍历是深度优先搜索的一种形式。我也把它放在我的答案中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-30
  • 2020-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多