来自 Preorder 的 BST,只需以相同的顺序插入节点

Posted

技术标签:

【中文标题】来自 Preorder 的 BST,只需以相同的顺序插入节点【英文标题】:BST from Preorder by just inserting the nodes in same order 【发布时间】:2013-10-28 16:42:03 【问题描述】:

要从给定的前序遍历构造一个 BST,如果我尝试以与前序中给定的相同顺序插入 BST,我会得到 BST。 那么,我们不是通过对元素进行排序或执行任何其他算法来创建有序吗?

有没有一个例子表明不能仅仅通过插入元素来构造树?

【问题讨论】:

如果不是通过向其中插入元素,还有什么方法可以构建树? 我的意思是我不需要使用任何算法,我们只需要按照与预购相同的顺序插入它们。 我也有同样的疑问。为什么在预购和有序的情况下创建 bst 时存在问题,而只能通过预购来完成? 【参考方案1】:

你是对的......你可以按照前序遍历给出的顺序插入节点来重建树。

插入的第一个节点必须放在正确的位置,因为它是根,并且前序遍历总是将根放在第一位。在前序遍历中遵循的是左子树的前序布局,然后是右子树。当插入左子树节点时,它们从根向左插入,然后在该子树上递归地应用相同的过程。以同样的方式重建右子树。使用归纳法,您可以根据需要正式证明这一点。

希望这会有所帮助!

【讨论】:

以上是关于来自 Preorder 的 BST,只需以相同的顺序插入节点的主要内容,如果未能解决你的问题,请参考以下文章

Construct BST from preorder list

BST 中节点的 PreOrder Successor

c_cpp 检查给定数组是否可以表示BST的Preorder Traversal

[LeetCode] 1008. Construct Binary Search Tree from Preorder Traversal

LC1008 Construct Binary Search Tree from Preorder Traversal

Leetcode 255. Verify Preorder Sequence in Binary Search Tree