为什么只有四种树遍历算法



网上有很多内容表明有四种树遍历算法:

  • 深度优先搜索-InOrder(左根-右(
  • 预订单(根从左到右(
  • PostOrder(左-右根(
  • 广度优先搜索-级别顺序遍历

这些树遍历是由于二进制搜索树的概念而获得的吗?(即,左子树小于右子树,因此我们在右之前从左遍历?(

树遍历的其他组合呢?例如:"右根-左"、"右-左根"、"根-右-左",然后按级别顺序从"右"节点遍历?

如果上述树遍历的组合是有效的,那么树遍历的时间复杂性相对于其左侧第一个对应项是否保持不变?

在现实世界的应用程序中,他们是否使用正确的树遍历的第一组合?举例说明。

这些树遍历是由于二进制搜索树的概念而获得的吗?(即,左子树小于右子树,因此我们先左后右?(

显然不是,因为有这四个遍历,唯一对二进制搜索树有意义的是"有序"遍历。其他三个会读出不正常的元素。

相反,我认为二叉树的惯例(至少在英语国家是这样(是称第一个孩子为"左",第二个孩子为为"右",并在绘制视觉表示时相应地绘制它们。该约定既适用于二进制搜索树(第一个子级包含父级之前的所有值,第二个子级包含其父级之后的所有值(,也适用于树遍历(我们在第二子级之前遍历第一个子级(。

树遍历的其他组合呢?示例:右根-左,右-左根,根-右-左,按级别顺序从右节点遍历?

一切皆有可能。你也可以按Z字形顺序遍历,有时你先处理左子项,然后再处理右子项,有时反过来。(或者,换一种说法:有时你把第一个孩子描述为"左",把第二个孩子描述成"右",有时反过来。(

如果以上树遍历的组合有效,我猜树遍历的时间复杂性相对于它们的左前对应项将保持不变?

如果您的树结构包含指向子级的显式指针等,并且遍历遵循这些指针,那么—是的:"左"one_answers"右"只是名字,并不影响理论的时间复杂性。但是,如果您的树结构是隐式的(例如,通常使用二进制堆(,那么它可能取决于细节。

在现实世界的应用程序中,它们是否使用正确的树遍历的第一组合?举例说明。

我确信现实世界中存在涉及从最大元素到最小元素遍历二进制搜索树的应用程序。在这样的应用程序中,术语"左"one_answers"右"可能是根据较小值优先(在左边(的约定进行分配的,因此从最大值到最小值的遍历将从树的"末端"开始,即最右边的节点,并朝着它的"开始"进行,即最左边的节点。

然而,这类事情最明显的例子是使用ORDER BY ... DESC子句查询SQL表;我相信主要的SQL实现使用排序的B树,而不是二进制搜索树,所以它们可能不使用术语"左"one_answers"右"。

en.wikipedia也没有考虑到一种遍历类型:

高度遍历。从高度为0的树叶/节点开始,按高度向上爬树。

执行的无用性和不利性只剩下毫无意义的练习。

最新更新