Definition for a binary tree node.
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
};
int TreeFind(struct TreeNode* root,struct TreeNode* newnode){
if(root==NULL)
return 0;
else
{
if(root==newnode)
return 1;
else if(TreeFind(root->left,newnode))
return 1;
else if(TreeFind(root->right,newnode))
return 1;
else
return 0;
}
}
struct TreeNode* lowestCommonAncestor(struct TreeNode* root, struct TreeNode* p, struct TreeNode* q) {
if(root==NULL)
return NULL;
if(p==root || q==root)
return root;
int pleft=TreeFind(root->left,p);
int qleft=TreeFind(root->left,q);
if(pleft==1 && qleft==1)
{
return lowestCommonAncestor(root->left,p,q);
}
else if(pleft==0 && qleft==0)
{
return lowestCommonAncestor(root->right,p,q);
}
else
return root;
}