Algorithm 创建具有更高复杂性的二叉搜索树
您将得到一个数字,它是二叉搜索树的根。然后给您一个包含N个元素的数组,您必须将其插入到二进制搜索树中。如果数组按排序顺序排列,则时间复杂度为N^2。我需要以更高的复杂度获得相同的树结构(比如NlogN)。我试了很多次,但都没能解决。有人能帮忙吗?如果你在字典里查一个单词,你可以在大约一半的时候打开字典,看看这一页。然后告诉你搜索词是在词典的前半部分还是后半部分。重复一遍,每次都把剩下的单词去掉一半,很快你就会把它缩小到一个单词。40亿字字典将需要大约32遍 二叉搜索树使用相同的原理。除了查找外,还可以插入。插入为O(对数N),除非树退化。 为了防止树退化,使用“红色”和“黑色”节点系统(颜色只是常规的),并且不允许长时间运行 两种颜色都可以。完整的解释在我的书《基本算法》中 这里有一个实现 但是如果你想了解红黑,你需要一些解释Algorithm 创建具有更高复杂性的二叉搜索树,algorithm,data-structures,Algorithm,Data Structures,您将得到一个数字,它是二叉搜索树的根。然后给您一个包含N个元素的数组,您必须将其插入到二进制搜索树中。如果数组按排序顺序排列,则时间复杂度为N^2。我需要以更高的复杂度获得相同的树结构(比如NlogN)。我试了很多次,但都没能解决。有人能帮忙吗?如果你在字典里查一个单词,你可以在大约一半的时候打开字典,看看这一页。然后告诉你搜索词是在词典的前半部分还是后半部分。重复一遍,每次都把剩下的单词去掉一半,很快你就会把它缩小到一个单词。40亿字字典将需要大约32遍 二叉搜索树使用相同的原理。除了查找外,
树。我假设所有的数字都是不同的(如果不是这样,你可以使用一对(数字,索引) 假设我们要插入一个元素
X
。如果它是迄今为止最小/最大的元素,那么它的去向就很清楚了
让我们来看看a=max y:y在树中,y
和b=min y:y在树中,y>X
。我声称:
a
没有右边的子项,或者b
没有左边的子项l=lca(a,b)
。由于a
在其左子树中,b
在其右子树中,a
。矛盾a
成为b
的祖先。如果b
有一个左子女c
。而不是a
。矛盾(另一种情况处理类似)O(logn)
时间中使用集合的下界操作)查找如上所述的a
和b
。他们中正好有一个没有合适的孩子。这就是新元素的发展方向总的时间复杂度显然是
O(N log N)
您是否尝试过搜索?给定“排序列表到bst”,Google会生成许多结果,例如@Gene您提供的链接是到平衡bst的排序列表,这不是我的问题。@HansSolo:您需要生成与naive算法完全相同的链接布局,还是只需要生成有效的bst?如果您只需要生成一个有效的BST,那么生成平衡BST的算法应该可以很好地工作。构建一个元素小于根的树并将其放在左侧,构建一个元素大于根的树并将其放在右侧。如果数组被排序,它看起来是O(N)@paulhank每次从根开始,那么如果数组按升序或降序排序,它将是N^2,对吗?谢谢你的回复。虽然我还没有完全明白这一点,但我会在周末完成这项工作,然后回来。谢谢