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.