微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

我们可以从中序序列构造 BST 吗?

如何解决我们可以从中序序列构造 BST 吗?

我们可以从 preOrder 或 postorder 序列构建一个二叉搜索树(BSTà from a preOrder or postorder 序列。但是我们可以从一个 inorder 序列单独构建一个 BST 吗?我认为使用 inorder 序列构建 BST 是不可能的,因为我们找不到根元素。

解决方法

你说得对。两个不同的二叉搜索树可以具有相同的中序序列,因此您不知道选择哪一个。但是,如果可以选择任何具有该中序序列的 BST,那么这是可能的。

但我想你的问题是关于重建相同 BST作为中序序列从中派生的树。 是不可能的:通过将 BST 转换为中序序列,您会丢失信息。即使您将获得根作为附加 信息,您通常也无法做到。事实上,对于给定的节点数量,BST 的形状可以是任何可能的。

最小的例子是中序 [1,2]。它可以代表这两种树:

           2           1
          /             \
         1               2

如果在这种情况下你得到了根作为额外信息,那么当然可以从中推导出 BST。

下一个最小的例子:[1,2,3]。这些树都有这样的中序:

          3           2            1
         /           / \            \
        2           1   3            2
       /                              \
      1                                3

同样,如果您获得根作为额外信息,您将能够知道三个 BST 中的哪一个是正确的。

但是一旦我们接触到更大的树,即使我们得到了根,我们也不会总是能够知道正确的 BST。

另请注意,BST 不需要达到最佳平衡。但即使我们只考虑最优平衡的 BST,中序序列也不能唯一地定义树。上面有 2 个节点的例子已经证明了这一点。但是让我们看看中序序列为 [1,3,4] 的四个节点。具有该中序序列的最平衡的树是:

        3             3            2          2
       / \           / \          / \        / \
      2   4         1   4        1   4      1   3
     /               \              /            \
    1                 2            3              4
        

在这里我们还看到,如果给定了最优平衡 BST 的根,仍然有两种可能性。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。