【问题标题】:Why can not determine the in-order traversal of a tree when given its pre-order and post-order traversals?为什么在给定前序和后序遍历时不能确定树的中序遍历?
【发布时间】:2014-07-14 03:07:24
【问题描述】:

我们都熟悉二叉树的前序、中序和后序遍历。数据结构类中的一个常见问题是:

  • 在给定中序遍历和后序遍历时找到二叉树的前序遍历。
  • 或者,您可以在给定中序和前序时找到后序遍历。
  • 但是,一般情况下,您无法在给定前序遍历和后序遍历时确定树的有序遍历。

我想知道为什么,有什么好的方法可以从理论上解释吗?

更新 1 一个答案:父母只有 1 个孩子的叶子会有问题,因为在这种情况下,这样的叶子可以是左孩子或右孩子。

【问题讨论】:

  • 你在找什么样的解释?
  • @Ranveer 我认为是这样的数学解释。
  • 但既然你在反驳某事,那么简单的逻辑就可以了,对吧?
  • 你问的是一般的二叉树还是二叉搜索树?
  • @JimMischel,一般来说是二叉树,谢谢。

标签: data-structures tree inorder preorder postorder


【解决方案1】:

我不熟悉这方面的理论解释,但我会尝试从逻辑上解释它。

让我们考虑一个更一般的问题:- 使用前序和后序遍历构造二叉树。

让我们举个例子。我们有以下树:

    1
   / \
  2   5
 / \   \
3   4   6

这棵树的前序为 (1,2,3,4,5,6),后序为 (3,4,2,6,5,1)。现在,我们希望重建同一棵树。

我们知道 1 是根节点。现在我们转到 2。在后序中,因为 2 在 1 之前,所以它是 1 的子节点。3 在下一个。由于 3 在 2 之前,它是 2 的孩子。 4 在 2 之前,因此它是孩子。 5 在 2 之后但在 1 之前,所以它是 1 的孩子,但不是 2。6 同样是 5 的孩子。但是 6 是左孩子还是右孩子?我们这里有两种可能:

    1              1  
   / \            / \
  2   5          2   5
 / \   \        / \ / 
3   4   6      3  4 6

无法确定 6 是 5 的左孩子还是右孩子。如果是 2(和类似的 1)孩子,我们可以肯定,因为在后序遍历(左树、右树)中 3 排在 4 之前-tree, root) 但如果是单个孩子,则存在歧义。

因此,对于一棵不完整的二叉树,不能明确地确定这棵树并因此进行中序遍历(尽管如果树是可以完成)。

【讨论】:

  • 如何检测到树是完整的?你怎么知道,例如,在不完整的树中,3 在 2 之前而不是 2 之后?换句话说,你怎么知道这棵树不只是一棵向左或向右完全退化的树?
猜你喜欢
  • 2011-03-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多