【发布时间】:2010-11-03 18:10:24
【问题描述】:
如何合并两个保持BST属性的二叉搜索树?
如果我们决定从树中取出每个元素并将其插入到另一个中,则此方法的复杂度将是O(n1 * log(n2)),其中n1 是树的节点数(比如T1),我们已经分裂了,n2 是另一棵树的节点数(比如T2)。在这个操作之后,只有一个 BST 有n1 + n2 节点。
我的问题是:我们能比 O(n1 * log(n2)) 做得更好吗?
【问题讨论】:
-
将树 1 的根插入树 2 并非在所有情况下都有效。
-
您假设所有二叉搜索树都是平衡的。 (例如伸展树不是)另外我认为你的复杂性略有下降。因为 n2 正在增加,所以当您插入值时,树会变得更深。也许 (n1 + n2) / 2 是一个更好的近似值(因为在插入的开头,插入的时间是 O(log n2),最后是 O(log(n1 + n2))。
-
@Evan Teran, ah union bf 例如,它们的范围 [a,h] 和 [b,f] 重叠,因此不能插入作为叶节点进入另一个
标签: c++ algorithm data-structures merge binary-search-tree