it can done in with 2 stack(size/length of the each stack is hieght of the
tree),(stack1,stack2)

//find the first element using in order
{
stack1[num_stack1++]=(pushing the ancestor of the first element) in first
stack.
}
//find the second element using in order
stack2[num_stack2++]= (pushing the ancestor of the second element) in second
stack.

num_stack1=num_stack2=num_stack1<num_stack2?num_stack1:num_stack2;
while(stack1[num_stack1--]!=stack2[num_stack2--]);

return (stack1[num_stack1])

Thank you,
Sid.
Thank you,
Sid.



On Sat, Sep 3, 2011 at 7:25 PM, siddharam suresh <siddharam....@gmail.com>wrote:

> it can done in with 2 stack(size/length of the each stack is hieght of the
> tree),(stack1,stack2)
>
>
> num_stack1=find the first element using in order (pushing the ancestor of
> the first element) in first stack.
> num_stack2=find the second element using in order (pushing the ancestor of
> the second element) in second stack.
>
> num_stack1=num_stack2=num_stack1<num_stack2?num_stack1:num_stack2;
> while(stack1[num_stack1--]!=stack2[num_stack2--]);
>
> return (stack1[num_stack1])
>
> Thank you,
> Sid.
>
>
>
> On Sat, Sep 3, 2011 at 6:05 PM, vikas <vikas.rastogi2...@gmail.com> wrote:
>
>> DON's solution will work
>>
>> On Sep 3, 11:28 am, Abhishek Yadav <algowithabhis...@gmail.com> wrote:
>> > this solution works if parent pointer is given.
>> > 1. Start moving up from both the nodes (if two nodes become equal, fine
>> this
>> > is the common ancestor) till you reach the root node and in between
>> count
>> > the number of nodes you covered in their path for both the nodes. Say 7
>> for
>> > node A and 10 for node B.
>> > 2. Now from B (longer path node) move up 3 (10-7) nodes.
>> > 3. now start moving up from B's new position and from A. Wherever they
>> meet
>> > is the common ancestor.
>> >
>> > On Sat, Sep 3, 2011 at 11:13 AM, bharatkumar bagana <
>> >
>> >
>> >
>> >
>> >
>> >
>> >
>> > bagana.bharatku...@gmail.com> wrote:
>> > > For BST it is easy ...it can be find in O(logn) time ..
>> > > when ever we find that the direction we are searching for x and y are
>> > > different, that node is the common ancestor ...no need to find either
>> x or y
>> > > where the nodes are...
>> > > what about binary tree ? how do we search an element in binary tree
>> > > efficiently ?
>> >
>> > > On Sat, Sep 3, 2011 at 12:44 AM, rajul jain <rajuljain...@gmail.com
>> >wrote:
>> >
>> > >> @anika this solution only works for BST
>> >
>> > >> On Mon, Aug 15, 2011 at 4:20 PM, Anika Jain <anika.jai...@gmail.com
>> >wrote:
>> >
>> > >>> node *common_ancestor(node *root, node **prev, int x,int y)
>> > >>>     {
>> > >>>         if(root->a==x || root->a==y)
>> > >>>             return *prev;
>> > >>>         else if(root->a > x && root->a > y)
>> > >>>         {
>> > >>>             prev=&root;
>> > >>>             return common_ancestor(root->l,prev, x,y);
>> > >>>         }
>> > >>>         else if(root->a < x && root->a < y)
>> > >>>         {
>> > >>>             prev=&root;
>> > >>>             return common_ancestor(root->r,prev, x,y);
>> > >>>         }
>> > >>>         else
>> > >>>         {
>> > >>>             prev=&root;
>> > >>>             return *prev;
>> > >>>         }
>> > >>>     }
>> >
>> > >>> with call as
>> > >>>             node *prev=NULL;
>> > >>>                  common_ancestor(root,&prev,x,y);
>> >
>> > >>> On Sun, Aug 14, 2011 at 10:08 PM, Yasir <yasir....@gmail.com>
>> wrote:
>> >
>> > >>>> Guys, How about the below mentioned implementation?
>> > >>>> The only assumptions is that nodes should exist  in the tree. (will
>> fail
>> > >>>> if one node exists and another doesn't)
>> >
>> > >>>> static Node LCA(Node root, int d1, int d2){
>> > >>>>  if(root==null)
>> > >>>> return root;
>> > >>>>  if(root.left!=null && ( root.left.data == d1 || root.left.data==d2
>> ) )
>> > >>>>      // both nodes exists in left sub-tree
>> > >>>> return root;
>> >
>> > >>>> if(root.right!=null && ( root.right.data == d1 ||
>> root.right.data==d2) )
>> > >>>>   // both nodes exists in right sub-tree
>> > >>>> return root;
>> > >>>>  Node ltree = LCA(root.left, d1, d2);       //check recursively in
>> left
>> > >>>> subtree
>> > >>>> Node rtree = LCA(root.right, d1, d2);    // check recursively in
>> > >>>> right subtree
>> > >>>>  if(ltree!=null && rtree!=null)    // One node in left & another in
>> > >>>> right
>> > >>>> return root;
>> > >>>>  return (ltree==null)?rtree:ltree;
>> > >>>> }
>> >
>> > >>>> Just to mention that, closest ancestor of 5&4 OR 4&9 would be 3 in
>> the
>> > >>>> following tree:
>> > >>>>  3
>> > >>>>    \
>> > >>>>    4
>> > >>>>  /    \
>> > >>>> 5     8
>> > >>>>       /
>> > >>>>     9
>> >
>> > >>>> --
>> > >>>> You received this message because you are subscribed to the Google
>> > >>>> Groups "Algorithm Geeks" group.
>> > >>>> To view this discussion on the web visit
>> > >>>>https://groups.google.com/d/msg/algogeeks/-/24JUUQsBHvIJ.
>> >
>> > >>>> To post to this group, send email to algogeeks@googlegroups.com.
>> > >>>> To unsubscribe from this group, send email to
>> > >>>> algogeeks+unsubscr...@googlegroups.com.
>> > >>>> For more options, visit this group at
>> > >>>>http://groups.google.com/group/algogeeks?hl=en.
>> >
>> > >>>  --
>> > >>> You received this message because you are subscribed to the Google
>> Groups
>> > >>> "Algorithm Geeks" group.
>> > >>> To post to this group, send email to algogeeks@googlegroups.com.
>> > >>> To unsubscribe from this group, send email to
>> > >>> algogeeks+unsubscr...@googlegroups.com.
>> > >>> For more options, visit this group at
>> > >>>http://groups.google.com/group/algogeeks?hl=en.
>> >
>> > >>  --
>> > >> You received this message because you are subscribed to the Google
>> Groups
>> > >> "Algorithm Geeks" group.
>> > >> To post to this group, send email to algogeeks@googlegroups.com.
>> > >> To unsubscribe from this group, send email to
>> > >> algogeeks+unsubscr...@googlegroups.com.
>> > >> For more options, visit this group at
>> > >>http://groups.google.com/group/algogeeks?hl=en.
>> >
>> > > --
>> >
>> > > **Please do not print this e-mail until urgent requirement. Go Green!!
>> > > Save Papers <=> Save Trees
>> > > *BharatKumar Bagana*
>> > > **http://www.google.com/profiles/bagana.bharatkumar<
>> http://www.google.com/profiles/bagana.bharatkumar>
>> > > *
>> > > Mobile +91 8056127652*
>> > > <bagana.bharatku...@gmail.com>
>> >
>> > >  --
>> > > You received this message because you are subscribed to the Google
>> Groups
>> > > "Algorithm Geeks" group.
>> > > To post to this group, send email to algogeeks@googlegroups.com.
>> > > To unsubscribe from this group, send email to
>> > > algogeeks+unsubscr...@googlegroups.com.
>> > > For more options, visit this group at
>> > >http://groups.google.com/group/algogeeks?hl=en.
>>
>> --
>> You received this message because you are subscribed to the Google Groups
>> "Algorithm Geeks" group.
>> To post to this group, send email to algogeeks@googlegroups.com.
>> To unsubscribe from this group, send email to
>> algogeeks+unsubscr...@googlegroups.com.
>> For more options, visit this group at
>> http://groups.google.com/group/algogeeks?hl=en.
>>
>>
>

-- 
You received this message because you are subscribed to the Google Groups 
"Algorithm Geeks" group.
To post to this group, send email to algogeeks@googlegroups.com.
To unsubscribe from this group, send email to 
algogeeks+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/algogeeks?hl=en.

Reply via email to