Algorithm 广度优先搜索和水平顺序遍历之间的区别是什么?

Algorithm 广度优先搜索和水平顺序遍历之间的区别是什么?,algorithm,binary-search-tree,graph-theory,breadth-first-search,Algorithm,Binary Search Tree,Graph Theory,Breadth First Search,我不需要代码,只需要一个解释。我的课本上说 级别顺序:级别i的每个节点在级别i+1的任何节点之前进行处理 我对广度优先搜索的理解是,首先从左侧开始搜索距离根最近的节点?这有什么不同?这是一种正方形和长方形的情况吗?对于一棵“合适的”树(见下文),至少在大多数定义中是一样的。例如: level 1 1 / \ 2 / 3 / / 3 2 4 广度优先 另请参见:广度优先搜索 树也可以按级

我不需要代码,只需要一个解释。我的课本上说

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

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

对于一棵“合适的”树(见下文),至少在大多数定义中是一样的。例如:

level
  1          1
            / \
  2        /   3
          /   /
  3      2   4
广度优先 另请参见:广度优先搜索

树也可以按级别顺序遍历

。。。宽度优先(级别顺序)遍历

至少,级别顺序遍历与宽度优先遍历相同。遍历某物的原因有很多,不仅仅是搜索,正如广度优先搜索似乎暗示的那样,尽管许多(或大多数)没有这样的区别,并且可以互换使用术语

我个人唯一一次真正使用“级别顺序遍历”是在谈论时,只是为了遵循相同的“…-顺序遍历”格式


对于一般图,“级别”的概念可能格式不好(尽管我认为您可以将其定义为距源节点的(最短)距离),因此级别顺序遍历可能定义不好,但广度优先搜索仍然非常有意义

我在上面提到了一个“适当的”树(如果你想知道的话,这是一个完全组成的子分类)——这仅仅意味着“级别”是按照你的预期定义的——每一条边都会增加一个级别。然而,人们可以稍微玩弄一下“级别”的定义(尽管这样做可能不被广泛接受),本质上允许边跳过级别(甚至在同一级别上的节点之间有边)。例如:

level
  1          1
            / \
  2        /   3
          /   /
  3      2   4
因此,级别顺序遍历将是
1,3,2,4


虽然宽度优先遍历将是
1,2,3,4

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

Afaik,没有区别;您可以交替使用“宽度优先”和“级别顺序”。^。每个人似乎都在分别定义它们,但实际上它们做的是相同的事情。树甚至可以这样使用级别吗?“我以前从来没有见过这种情况。”芒克斯说,“我也没有见过,我只是在考虑这种可能性。如果数据中“级别”的含义与树中“级别”的含义不一致,您可以(有点令人困惑地)使用级别顺序遍历来表示遍历该顺序。@Dukeling:我认为这是一种“权重顺序”遍历,在遍历的实现中,使用优先级队列而不是FIFO队列(即Dijkstra算法),您会得到什么结果。这显然是有意义的,即使是在一般图形的情况下,甚至是有用的。我不记得以前听过“权重顺序遍历”这句话,但那可能是我不断恶化的记忆;Google很友好地找到了这个短语的许多用法,包括我猜基于这个解释级别,顺序遍历意味着在实现中使用了一种特定的逻辑(不检查是否以前访问过某个节点),而BFS/DFS意味着在实现中使用了一种不同的底层逻辑(实际检查之前是否访问过节点)。正确吗?