结合二进制搜索树

时间:2016-10-30 22:17:55

标签: algorithm binary-search-tree

我遇到问题的问题如下。

  

假设您有两个不同的二叉搜索树,A和B,以及   你知道A中最大的元素小于   B中的最小元素。假设高度(A)

因此,由于A中的最大元素小于B中的最小元素,这意味着A中的每个元素都小于B中的每个元素。在新树中,左侧应为树A,右侧应为应该是树B.但是你如何在时间O(高度(A))中以编程方式进行合并?你也不需要循环通过B吗? (这将使其成为O(高度(A)+高度(B))

2 个答案:

答案 0 :(得分:6)

由于目前存在问题,您可以将B树的根作为A树最大元素(最右边的叶子)的右子项追加。

复杂性将是O(高度(A)) - 找到叶子。

答案 1 :(得分:2)

  

在新树中,左侧应为树A,右侧应为树B.

然后根节点的元素是什么?

  

但是如何在时间O(高度(A))中以编程方式进行合并?

如果你是对的,那么你可以在O(1)中执行:node(X, A, B)(用于创建具有元素X,左子树A和右子树B的节点的伪代码)。

  

你也不需要循环通过B吗? (这将使其成为O(高度(A)+高度(B))

如果通过“循环B”意味着访问所有元素,则需要更长时间。在平衡搜索树中,height(B)log(size(B))成比例。

你可以做的是沿着A的最右边的分支走(这需要O(height(A))步)。找到结束后,在那里插入B(通过node.right分配到O(1))。