树遍历算法:为什么左节点总是总是在右节点之前?

时间:2018-08-30 20:53:29

标签: binary-tree

你们都知道DFS算法。在专业文献中,有3种DFS: 预购(节点,左子,右子) 有序(左子节点,节点,右子节点) 后订单(左子节点,右子节点,节点)

在所有这三种算法/风格中,左孩子始终排在右孩子之前。为什么? 将合适的孩子放在左边的孩子之前有问题吗?

2 个答案:

答案 0 :(得分:1)

[免责声明:我只是在这里说明我的直觉,因此我无法为自己的陈述提供参考。]

我相信它与值的顺序有关,它更多地是一种约定而非规则。对于二元 search 树,这更有意义,其中左子节点中的值小于节点中的值,而右子节点中的值则相反。当我们进行有序遍历时,我们以升序获得值。请注意,这是另一种约定:所有有关BST的文献都说,较小的值向左,较大的值向右;但是,如果定义不是这样的话,它根本不会受到伤害。也许升序被认为是某种“自然”的排序(我见过的所有库排序功能默认按 的升序对值进行排序)。

如果我们在这三种算法中将右边的子树放在左边,那么它们将产生同一棵树的水平镜像版本的“传统”序列。

也许在一个平行的宇宙中,人们发展了BST的概念,其中较小的值向右移动,如果他们将遍历算法描述为从左到右,则遍历产生的结果将完全相同作为我们的“传统”遍历!

答案 1 :(得分:0)

左和右的名称是给树节点指定的任意名称。在定义二分搜索树的情况下,此约定很重要,其中左子树存储的节点小于根,而右子树存储的节点大于根。

从更大的角度看,选择先左后右的惯例最有可能与从左右读取拉丁字母的方式有关。