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

时间:2014-05-10 03:21:13

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

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

  

级别顺序:级别i的每个节点在级别i + 1

的任何节点之前处理

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

3 个答案:

答案 0 :(得分:17)

对于“正确的”树(见下文),它是相同的,至少大多数定义。与Wikipedia类似,例如:

  

广度优先

     

另见:广度优先搜索

     

树也可以在级别顺序,...

中遍历      

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

嗯,至少水平顺序遍历与广度优先遍历相同。遍历某些东西有很多理由,它不仅仅是搜索,因为广度优先搜索似乎意味着,尽管许多(或大多数)没有做出这种区分并使用术语可互换。

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


对于一般图形,“级别”的概念可能格式不正确(尽管可能只是将其定义为距离源节点的(最短)距离,我想),因此,水平顺序遍历可能没有明确定义,但广度优先搜索仍然是完全合理的。

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

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

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

答案 1 :(得分:0)

我们对树使用级别顺序遍历,因为在树中没有循环,并且一旦访问了节点,就不会再次访问 但在图形中却并非如此。 图也可以是循环的 如果图是循环的,则按照访问节点的级别顺序,它不会检查是否访问过它,并且它将无限次遍历同一节点。并且程序将由于循环而继续遍历。 因此,在使用图形的情况下,我们使用BFS或DFS。

答案 2 :(得分:0)

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

定义:有序树级别顺序是从上到下的顶点列表,左- 该树的标准平面图从右到右的顺序”。

请记住,当我们讨论级别顺序时,我们只讨论树,而不是一般的图。

我们可以更具体地说明我们正在讨论Rooted-Trees

定义:有根树是一棵树,其指定的顶点称为根。每条边都被认为是远离根的。因此,有根的树是一棵有向树,其根的入度 = 0(因此没有传入边)”。

*区分很重要,因为它的这个属性允许树的递归实现。

enter image description here

此外,层序遍历对图没有意义(树是图的一种特定类型(无环且连通))。

因此,对于我们使用 BFS 的图,我们用于树的 BFS 被称为“级别顺序遍历”(因为既然我们在谈论有根树,那么级别确实有意义。而在图中他们不会感觉,因为没有根)

结论:层序遍历是对特定图结构的情况的广度优先搜索:Tree(特别是Rooted-Trees)