There is no need to use recursion here. Tail recursion is essentially
using recursion as an expensive loop.

int leastCommonAncestor(struct node *root, int n1, int n2)
{
   while(root)
   {
      if ((root->data == n1) || (root->data == n2) || ((root->data >
n1) != (root->data > n2)))
         return root->data;
      root = (root->data > n1) ? root->left : root->right;
   }
   return -1;
}

On Apr 21, 12:56 pm, rahul sharma <rahul23111...@gmail.com> wrote:
> int leastCommanAncestor(struct node* root, int n1, int n2)
> {
>  if(root==NULL)
>  return -1;
>  if(root->data>n1 && root->data>n2)
>  return leastCommanAncestor(root->left,n1,n2);
>  else if(root->data<n1 && root->data<n2)
>  return leastCommanAncestor(root->right,n1,n2);
>  return root->data;
>
> }
>
> Does this code miss any case?N suppose if we have to find LCA of n1 and n2
> and suppose n1 is parent of n2 ..then this will return n1..is this fyn or
> if n1 is parent of n2 then we should return -1??
>
> Plz. comment

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to algogeeks+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.


Reply via email to