问题 广度优先搜索和级别顺序遍历有什么区别?


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

级别顺序:级别i的每个节点在级别i + 1的任何节点之前被处理

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


1054
2018-05-10 03:21


起源

Afaik,没有区别;你可以互换地使用“广度优先”和“水平秩序”。 - rici
^这个。每个人似乎都单独定义它们,但它们确实做同样的事情。 - munchschair


答案:


对于“正确的”树(见下文),它是相同的,至少大多数定义。喜欢 维基百科, 例如:

广度优先

另请参见:广度优先搜索 

树木也可以穿越 一级阶,...

...广度优先(水平顺序)遍历......

好吧,至少水平顺序遍历与广度优先相同 遍历。遍历某些东西的原因有很多,它不仅仅需要搜索广告优先级 搜索 似乎暗示,尽管许多(或大多数)没有做出这种区分并且可互换地使用这些术语。

我个人真正使用“水平顺序遍历”的唯一一次就是谈论 in-,post-和pre-order遍历,只是遵循相同的“......订单遍历”格式。


对于一般图表,“水平”的概念可能不是很好(尽管你 可以 我想将它定义为与源节点的(最短)距离,因此水平顺序遍历可能没有明确定义,但是广度优先搜索仍然是完全有意义的。

我在上面提到了一个“正确的”树(这是一个完全构成的子分类,以防你想知道) - 这只是意味着'水平'被定义为你所期望的 - 每个边缘将水平增加一个。然而,人们可能能够稍微使用“级别”的定义(尽管这可能不被广泛接受),实质上允许边跳过级别(或者甚至在同一级别上的节点之间具有边缘)。例如:

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

所以水平顺序遍历就是 1, 3, 2, 4
而广度优先遍历将是 1, 2, 3, 4


13
2018-05-11 15:10



树木甚至能以这种方式使用水平吗?我以前从未见过。 - munchschair
@munchschair我也没有,我只是考虑到这种可能性。如果“level”在您的数据中具有与树中“level”的含义不对应的含义,则可能(有点令人困惑)使用level-order遍历来表示遍历该顺序。 - Dukeling
@Dukeling:我认为这将是一个“权重顺序”遍历,你可以通过在遍历的实现中使用优先级队列而不是FIFO队列来获得(即Dijkstra算法)。这显然是有意义的,即使在一般图表的情况下,甚至是有用的。我不记得以前听过“重量顺序遍历”这个短语,但这可能是我记忆力的恶化;谷歌很友好地找到了这个短语的一些用法,包括 papl.cs.brown.edu/2013/... - rici