C 合并两个BST的时间复杂度?

C 合并两个BST的时间复杂度?,c,binary-search-tree,C,Binary Search Tree,如果我有两棵树t1和t2,我会取t1的最大值,并确保它小于t2的最小值。如果我然后通过将T2的最小值带到根来合并树,那么这个操作的时间复杂度是多少?为什么?在您检查了MAX(t1)之后,因为一旦您提取了MIN(T2),其余的操作都是常数时间操作。然而,寻找和提取MIN(t2)通常不是O(1)。这取决于你是否有一个或多或少的平衡树。在最坏的情况下,这是一个O(n)操作,因为最大条目是t2的根,所有按降序排列的节点都由下一个较大值的左节点指向。如果树或多或少是平衡的,那么查找MIN(t2)将变成O(

如果我有两棵树t1和t2,我会取t1的最大值,并确保它小于t2的最小值。如果我然后通过将T2的最小值带到根来合并树,那么这个操作的时间复杂度是多少?为什么?

在您检查了MAX(t1)之后,因为一旦您提取了MIN(T2),其余的操作都是常数时间操作。然而,寻找和提取MIN(t2)通常不是O(1)。这取决于你是否有一个或多或少的平衡树。在最坏的情况下,这是一个O(n)操作,因为最大条目是t2的根,所有按降序排列的节点都由下一个较大值的左节点指向。如果树或多或少是平衡的,那么查找MIN(t2)将变成O(log.N)。您是否提前知道
MAX(t1)@shapiroyacov no,因为原始q是要删除给定范围内的节点,所以我制作了一个delete函数来删除节点,该函数调用此连接函数。因此,当调用连接函数时,您在检查MAX(t1)后会知道
MAX(t1),因为一旦提取了MIN(t2),其余的操作是固定时间操作。然而,寻找和提取MIN(t2)通常不是O(1)。这取决于你是否有一个或多或少的平衡树。在最坏的情况下,这是一个O(n)操作,因为最大条目是t2的根,所有按降序排列的节点都由下一个较大值的左节点指向。如果树或多或少是平衡的,那么查找MIN(t2)将变成O(log.N)。您是否提前知道
MAX(t1)@shapiroyacov否,因为原始q是要删除给定范围内的节点,所以我制作了一个删除函数来删除节点,该函数调用此连接函数。因此,当调用连接函数时,您知道
MAX(t1)