1

这是一个相当简单的问题,我注意到当我表示一棵树时,无论我采用哪种方式(后序、有序、预序),叶子总是以相同的顺序出现,留给正确的。

我只是想知道为什么,这是有原因的吗?

我刚刚开始研究它们并想出了这个。

编辑。:

我有一棵这样的树:

        A
    B       C
  D       E   F

叶节点是:D、E 和 F

预购是:A,B,D,C,E,F

顺序是:D,B,A,E,C,F

后序为:D,B,E,F,C,A

无论我选择哪种顺序,叶节点总是从左到右出现。问题是为什么会这样。赋予这些节点以使它们按此顺序出现的用途是什么。

我一直在读到这种树被用作递归过程的表示,所以我的猜测是右叶节点是在左叶节点发生之后出现的情况,这就是为什么它们后来出现在任何表示中的原因?

4

3 回答 3

2

因为,无论您将节点放在哪里,您总是先访问左孩子,然后再访问右孩子。但是,我不完全确定您的观察是否一定总是正确的,如果您的叶子与根的距离不同 - 我可能是错的,虽然......

于 2013-11-05T18:16:35.290 回答
1

所有这些遍历:前序、中序和后序遍历都是深度优先遍历。在所有这些中,左节点在右节点之前处理(只有根振荡):

Preorder :  <ROOT>  LEFT   RIGHT
Inorder  :  LEFT   <ROOT>  RIGHT
Postorder:  LEFT    RIGHT <ROOT>

在每一次遍历中,我们最终都是从左向右移动。

因此,叶节点总是以相同的顺序依次出现——在所有三个遍历中。

上述解决方案中有一点是关于距根不同距离的叶子。我根据以下示例对其进行了验证:

在此处输入图像描述

PreOrder - 8, 5, 9, 7, 1, 12, 2, 4, 11, 3
InOrder - 9, 5, 1, 7, 2, 12, 8, 4, 3, 11
PostOrder - 9, 1, 2, 12, 7, 5, 3, 11, 4, 8 

即使在这种情况下,排序也是正确的

目的:它看起来更像是左右模式的结果。

于 2014-03-25T00:26:29.647 回答
0

因为,在所有这些遍历中,您在访问右子树之前访问左子树。

于 2021-12-02T13:31:05.277 回答