假设我们有一个包含 n 个数字的平衡二叉搜索树 T。给定两个数字 L 和 H,并希望将 T 中位于 L 和 H 之间的所有数字相加。假设 T 中有 m 个这样的数字。如果时间的最紧上限为
计算总和为 O(n a log b n + m c log d n),a + 10b + 100c + 1000d 的值为 ____。
(一) 60
(乙) 110
(三) 210
(四) 50答案:(乙)
解释:
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) 时间。请注意,代码首先遍历高度以找到位于范围内的节点。一旦找到这样的节点,它就会为左子节点和右子节点重复出现。仅当节点在范围内时才会进行两次递归调用。因此,对于范围内的每个节点,我们最多进行一次额外调用(此处额外调用意味着调用不在范围内的节点)。这个问题的测验