algorithm - 广度优先搜索和层序遍历有什么区别?

标签 algorithm binary-search-tree graph-theory breadth-first-search

我不需要代码,只需要一个解释。我的教科书说

level order: each node at level i is processed before any node at level i+1

我对广度优先搜索的理解是,从左边开始,首先探索距离根最近的节点?这有什么不同?这是正方形和长方形的情况吗?

最佳答案

对于“正确的”树(见下文),它是同一回事,至少在大多数定义中是这样。喜欢Wikipedia ,例如:

Breadth-first

See also: Breadth-first search

Trees can also be traversed in level-order, ...

... a breadth-first (level-order) traversal ...

好吧,至少层序遍历与广度优先遍历是一样的。遍历某些东西的原因有很多,而不仅仅是搜索,正如广度优先 搜索 似乎暗示的那样,尽管许多(或大多数)没有做出这种区分并使用术语可互换。

我个人唯一一次真正使用“级别顺序遍历”是在谈论 in-, post- and pre-order traversals 时, 只是为了遵循相同的“...顺序遍历”格式。


对于一般图,“级别”的概念可能不是合式的(虽然您可以只是将其定义为与源节点的(最短)距离,我想),因此,级别顺序遍历可能没有明确定义,但广度优先搜索仍然很有意义。

我在上面提到了一个“正确的”树(如果你想知道的话,它是一个完全由子分类组成的树)——这只是意味着“级别”的定义如你所期望的——每条边将级别增加一个.然而,人们可能能够稍微调整一下“级别”的定义(尽管这样做可能不会被广泛接受),本质上允许边缘跳过级别(或者甚至在同一级别的节点之间有边缘)。例如:

level
  1          1
            / \
  2        /   3
          /   /
  3      2   4

因此层序遍历为1, 3, 2, 4,
而广度优先遍历将是 1, 2, 3, 4

关于algorithm - 广度优先搜索和层序遍历有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23576746/

相关文章:

algorithm - 检查两个节点之间的单源最短路径是否唯一

algorithm - 二元提升|行星查询 1 | TLE

algorithm - Z算法背后的直觉

c - 出现段错误。不知道为什么

c++ - 在具有边界/Opengl、VC++ 的开放模型上对 Vertex Normal 进行 1 环遍历

c++ - 二进制搜索树插入导致堆栈溢出 C++

c - 执行后c中出现段错误11

python-3.x - 是否可以将无向和有向边添加到 networkx 中的图形对象?

algorithm - 将网格中按顺序分配的数字转换为 x-y 坐标

algorithm - 立方求和算法的循环不变量是什么?