📜  门| GATE-CS-2014-(Set-3) |第 65 题

📅  最后修改于: 2021-09-26 03:04:13             🧑  作者: Mango

假设我们有一个包含 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) 时间。请注意,代码首先遍历高度以找到位于范围内的节点。一旦找到这样的节点,它就会为左子节点和右子节点重复出现。仅当节点在范围内时才会进行两次递归调用。因此,对于范围内的每个节点,我们最多进行一次额外调用(此处额外调用意味着调用不在范围内的节点)。这个问题的测验