GATE CSE
First time here? Checkout the FAQ!
x
+1 vote
82 views
can anyone define the procedure to find the common ancestor of any two given nodes in balanced BST..??
asked in DS by Veteran (13.2k points)   | 82 views

2 Answers

+1 vote
Best answer
#define BIGGER 1
#define SMALLER -1
#define EQUAL 0

int compare(int x,int y) {
    if(x == y) return EQUAL;
    else if(x < y) return SMALLER;
    els return BIGGER;
}


struct node* find_LCA(struct node *root,int a,int b) {
    
    // I have assumed that a and b exist in the tree already
    
    if(root != NULL) {
        // compare this node with a
        int res1 = compare(a,root->data); 
        // compare this node with b
        int res2 = compare(b,root->data); 	
    }
    // is any one of a,b is equal to this node value
    // then return this node 
    if(res1 == EQUAL || res2 == EQUAL) {  	
        return root;					
    }
    //  a and b are on different subtree
    else if(res1 != res2) {				
        return root;					  
    }
    else {
    // one of the following recursive call will execute
        
        if(res1 == BIGGER) {				// or res2 == BIGGER same thing
            return find_LCA(root->right_child,a,b);
        }else {
            return find_LCA(root->left_child,a,b);
        }
    }




}
  • Best case $O(1)$
  • Worst case $O(\log n)$
  • Checking of null pointers before a recursive call and a=b  or any other code handling issue have has been eliminated for simplicity. 
answered by Veteran (48.5k points)  
edited by
For normal binary tree or any rooted tree, and with multiple queries (a,b), this LCA problem is of great interest and very interesting.
+1 vote
will it be like -

first comapring A nd B with the root node..if A< root and B > root then root is the common ancestor..

if A< ROOT & B is also < root then again calling same function with root-> left

if A>root and B is also > root then again calling same function with root -> right

its T(n) will be O(log n)..right?

please verify this
answered by Veteran (13.2k points)  


Top Users Jun 2017
  1. Bikram

    3704 Points

  2. Arnab Bhadra

    1502 Points

  3. Hemant Parihar

    1502 Points

  4. Niraj Singh 2

    1481 Points

  5. junaid ahmad

    1432 Points

  6. Debashish Deka

    1384 Points

  7. Rupendra Choudhary

    1220 Points

  8. rahul sharma 5

    1220 Points

  9. Arjun

    1168 Points

  10. srestha

    1010 Points

Monthly Topper: Rs. 500 gift card
Top Users 2017 Jun 26 - Jul 02
  1. Arjun

    208 Points

  2. akankshadewangan24

    152 Points

  3. Debashish Deka

    138 Points

  4. Hira Thakur

    130 Points

  5. Soumya29

    106 Points


23,399 questions
30,111 answers
67,490 comments
28,426 users