假设我们有一个包含n个数字的平衡二叉搜索树T。我们给了两个数字L和H,并希望对T中位于L和H之间的所有数字求和。假设T中有m个这样的数字。
计算总和为O(n日志B n的+ M C登录d n)的的+ 10B + 100C + 1000D是____的值。
(A) 60
(B) 110
(C) 210
(D) 50答案: (B)
解释:
int getSum(node *root, int L, int H)
{
// Base Case
if (root == NULL)
return 0;
if (root->key < L)
return getSum(root->right, L, H);
if (root->key > H)
return getSum(root->left, L, H)
if (root->key >= L && root->key <=H)
return getSum(root->left, L, H) + root->key +
getSum(root->right, L, H);
}
以上总是需要O(m + Logn)的时间。请注意,代码首先遍历高度以找到位于范围内的节点。一旦找到这样的节点,它将为左右子节点重复发生。仅当节点在范围内时,才进行两次递归调用。因此,对于范围内的每个节点,我们最多进行一个额外的调用(此处的额外调用意味着调用不在范围内的节点)。这个问题的测验