当前位置: 首页 > 知识库问答 >
问题:

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

戴品
2023-03-14

web上有很多内容指出有四种树遍历算法:

  • 深度优先搜索-无序(左-根-右)
  • 预购(根-左-右)
  • 后序(左-右-根)
  • 广度优先搜索-级别顺序遍历

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

那么其他树遍历的组合呢?例如:右根左,右根左,右根左,按级别顺序从右节点开始遍历?

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

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

共有2个答案

仲孙超
2023-03-14

有一种类型的遍历en.wikipedia也没有说明:

高度遍历。从高度0处的叶子/节点开始,通过高度向上爬树的高度。

实现的无用性和不利性被视为毫无意义的练习。

丁德义
2023-03-14

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

显然不是,因为这四次遍历,对于二叉搜索树来说唯一有意义的就是“按序”遍历。其他三个将按顺序读取元素。

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

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

都完全有可能。您也可以以之字形顺序遍历,有时您在处理右子级之前处理左子级,有时相反。(或者,换句话说:有时你把第一个孩子描述为“左”,第二个孩子描述为“右”,有时相反。)

如果树遍历的上述组合是有效的,我猜树遍历的时间复杂度将保持相同,相对于它们的左优先对应?

如果您的树结构包含指向子级的显式指针等,并且遍历遵循这些指针,那么-是的:“left”和“right”只是名称,不会影响理论上的时间复杂性。但是如果您的树结构是隐式的(例如,通常使用二进制堆),那么它可能取决于细节。

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

我确信现实世界中存在一些应用程序,它们涉及从最大元素到最小元素遍历二叉搜索树。在这样的应用程序中,术语“左”和“右”很可能是基于较小的值首先出现(在左边)的约定来分配的,因此从最大到最小的遍历将从树的“末端”开始,这意味着树的最右边的节点,并朝着树的“开始”,这意味着树的最左边。

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

 类似资料:
  • 我已经实现了一个四叉树来对图形中的点进行排序。每当一个点落在已经包含一个点的象限内时,该象限就会再次细分,以允许每个点落入其自己的象限。每个节点都具有以下属性: 假设我想遍历存储在这棵树中的每个节点,并计算落在给定矩形边界内的点数,我将如何递归检查树中的每个节点(假设我已经有方法检查它们是否落在某个区域)?

  • 遍历是访问树的所有节点的过程,也可以打印它们的值。 因为所有节点都是通过边(链接)连接的,所以我们总是从根(头)节点开始。 也就是说,我们不能随机访问树中的节点。 我们使用三种方式遍历树 - 有序遍历 Pre-order Traversal Post-order Traversal 我们现在将使用以下二叉树来查看C编程语言中树遍历的实现 - 用C实现 (Implementation in C) #

  • 我在编码挑战中遇到了一个问题。 完整二叉树是一种二叉树,其中除叶节点外的每个节点都有两个子节点,且树的最后一级边高度有叶节点。 您的任务很简单,给定完整二叉树的遍历,请按顺序遍历打印其

  • 问题内容: 我不太确定自己是在说这种权利,但请耐心等待。 我想知道是否有可能在SQL(特别是MySQL)中做这样的事情:假设我们有树状数据保存在下表中的数据库中: 因此,除“根”行外,每一行都有一个父级,而叶行除外,每一行都有子级。 是否可以仅使用SQL查找任何给定行的所有后代? 问题答案: 可以仅使用SQL而不是在单个查询中获取所有后代。但是我敢肯定,你知道了。我假设您的意思是您想在单个查询中执

  • 本文向大家介绍Java完全二叉树的创建与四种遍历方法分析,包括了Java完全二叉树的创建与四种遍历方法分析的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了Java完全二叉树的创建与四种遍历方法。分享给大家供大家参考,具体如下: 有如下的一颗完全二叉树: 先序遍历结果应该为:1  2  4  5  3  6  7 中序遍历结果应该为:4  2  5  1  6  3  7 后序遍历结果应该为

  • 从概念上讲,是否可能有一个树,您可以从给定的叶节点(而不是根节点)开始遍历它,并使用父指针到达根? 我问这个问题是因为我看到有人实现了一个树,他们使用一个数组来保存所有叶节点/外部节点,每个叶节点/外部节点只指向它们的父节点,而那些父节点指向它们的父节点等等,直到你到达没有父节点的根节点。因此,它们的实现要求您从一片叶子开始,到达树中的任何地方,并且您不能“向下”树,因为她的树节点没有任何子指针,