Binary Search Tree : Lowest Common Ancestor

  • + 1 comment

    Easiest solution https://www.youtube.com/watch?v=N9yepbXdOkI

    • + 1 comment

      Node *add1 [25]; Node *add2[25]; int i=0,j=0; Node *lca(Node *root, int v1,int v2) { // Write your code here.

          if(v1>root->data) {
              root=lca(root->right,v1,v2);
              add1[i++]=root;
      
          }
           else if(v2>root->data) {
              root=lca(root->right,v1,v2);
              add2[j++]=root;
      
          }   
          else if(v1<root->data) {
              root=lca(root->left,v1,v2);
              add1[i++]=root;
      
          }
           else if(v2<root->data) {
              root=lca(root->left,v1,v2);
              add2[j++]=root;
      
          }   
          Node *a;
          for(int i=0;i<25;i++){
              for(int j=0;j<25;j++){
                  if(add1[i]==add2[2]) {a= add1[i]; return a;}
              }
          }
      
      
      }
      
      • + 0 comments
        i was basically storing the address of the of each node through which we are passing for v1 and v2 in add1 and add2 respectively
        i want to ask few questions:-
        solution is a structure (in this question) , when we are calling Lca function (MYTREE.LCA(ROOT,V1,V2) , does the "instance of struct solution " will have --> add1[25] , add2[25], int i,j ; when function is called
        on each function call (root=lca(root->left,v1,v2) ) in each "IF" statement does the add1[25] , add2[25], int i,j , will again take memory OR one single copy of add1[25] , add2[25], int i,j ; is only there, as only one insance is made;