【问题标题】:Binary tree. Order of leaf nodes (tree traversal)二叉树。叶节点的顺序(树遍历)
【发布时间】:2013-11-05 16:00:54
【问题描述】:

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

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

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

编辑:

我有一棵这样的树:

        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

无论我选择哪种顺序,叶节点总是从左到右出现。问题是为什么会这样。这些节点按此顺序出现有什么用。

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

【问题讨论】:

  • 你能详细说明一下这个问题吗?

标签: tree


【解决方案1】:

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

【讨论】:

  • 嗯,是的,但我的问题是这个事实是否有实际目的。
【解决方案2】:

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

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 

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

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

【讨论】:

    【解决方案3】:

    因为,在所有这些遍历中,您先访问左子树,然后再访问右子树。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-14
      相关资源
      最近更新 更多