我不需要代码,只需要解释。我的教材上写道:
层序遍历:在处理任何一级别 i+1 的节点之前,处理每个级别为 i 的节点。
我对广度优先搜索的理解是,从左边开始先探索离根节点最近的节点?这有什么不同吗?这是一个正方形和长方形的情况吗?
我不需要代码,只需要解释。我的教材上写道:
层序遍历:在处理任何一级别 i+1 的节点之前,处理每个级别为 i 的节点。
我对广度优先搜索的理解是,从左边开始先探索离根节点最近的节点?这有什么不同吗?这是一个正方形和长方形的情况吗?
对于一个“正确”的树(见下文),至少按大多数定义,它是相同的。例如,像维基百科中所述:
广度优先
另见:广度优先搜索
还可以按层次顺序遍历树...
... 广度优先(层次顺序)遍历 ...
好吧,至少按照大多数定义,“层次顺序遍历”和广度优先遍历是相同的。有很多理由可以遍历某些东西,这不仅仅是为了搜索,就像广度优先搜索所暗示的那样,尽管许多人(或多或少)并没有区分并且互换使用这些术语。
唯一我个人真正使用“层次顺序遍历”的时间是在谈论前序、后序和中序遍历时,只是为了遵循相同的“...-order遍历”格式。
对于一般图形,'级别'的概念可能不是明确的(尽管你可以将其定义为源节点的(最短)距离,我想),因此“层次顺序遍历”可能没有明确定义,但广度优先搜索仍然非常有意义。
我上面提到了一个“正确”的树(这是一种完全虚构的子分类,如果你在疑惑的话)- 这意味着“级别”被定义为你所期望的方式-每个边增加一个级别。然而,人们可能会稍微玩弄“级别”的定义(尽管这样做可能不被广泛接受),从本质上允许边跨越级别(甚至在同一级别的节点之间具有边)。例如:
level
1 1
/ \
2 / 3
/ /
3 2 4
因此,层序遍历将是1, 3, 2, 4
,
而广度优先遍历将是1, 2, 3, 4
。
一般来说,遍历是一种访问数据结构中所有元素仅一次的技术。获取、修改、检查树中所有节点数据的过程称为树遍历
。
搜索意味着查找一个项目。它并不意味着你要访问所有节点。假设你正在寻找第一个值小于10的节点,一旦找到10,你就退出搜索。