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

📅  最后修改于: 2021-06-29 20:34:23             🧑  作者: Mango

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