【发布时间】:2021-09-25 20:19:15
【问题描述】:
想检查是否有一种方法可以仅从按排序顺序的中序遍历构造二叉搜索树。我在想可能有某种方法我们可以递归地做到这一点,但无法弄清楚。任何指针将不胜感激。
【问题讨论】:
-
你可以构造a二叉搜索树,但不一定与原来的同构。
标签: algorithm data-structures binary-search-tree
想检查是否有一种方法可以仅从按排序顺序的中序遍历构造二叉搜索树。我在想可能有某种方法我们可以递归地做到这一点,但无法弄清楚。任何指针将不胜感激。
【问题讨论】:
标签: algorithm data-structures binary-search-tree
一个 BST 只有一个有序遍历,但一个给定的有序遍历可以构造多个 BST。因此,是的,可以使用给定的有序遍历构造一个 BST,但您可能不会最终得到您开始按顺序遍历的同一棵树。
查看这篇文章了解更多信息:https://www.geeksforgeeks.org/find-all-possible-trees-with-given-inorder-traversal/
【讨论】:
是的,可以从中序遍历构造二叉搜索树。
观察二叉搜索树的中序遍历总是排序的。
有许多可能的结果,但人们可能对生成尽可能平衡的树特别感兴趣,以便在其中进行高效搜索。产生低效二叉搜索树的一种方法是在最后插入的节点的右侧不断添加新节点。然后生成的二叉搜索树倾斜。
如果例如中序遍历是 1,2,3,4,5,6,我们会得到这棵树:
1
\
2
\
3
\
4
\
5
\
6
这对于二叉搜索树来说不是很有帮助,因为它实际上已经退化为一条链,并且在该树中搜索并不比在输入数组中从左到右执行搜索更好。
一个更有效的替代方案是这种二叉搜索树,它具有相同的中序遍历:
3
/ \
2 5
/ / \
1 4 6
产生相当平衡的二叉搜索树的算法确实可以是递归的:
null(emtpy树)【讨论】: