如何解决我们可以从中序序列构造 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 举报,一经查实,本站将立刻删除。