原题目:
235. Lowest Common Ancestor of a Binary Search Tree
读题:
本文题目是查找二叉搜索树的两个节点的最近公共祖先,有两个点
1)对象是二叉搜索树,左子树的节点均小于根节点,右子树的节点均大于根节点
2)公共祖先可能有很多个,取最近的那个
解题思路:
由于是二叉搜索树,用递归就比较简单了,如果p,q节点值均大于root节点值,那么必定在右子树,若均小于,则在左子树,若一大一小,则必然是root节点为最近公共祖先
class Solution
{
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q)
{
int min = 0;
int max = 0;
if(NULL == root || NULL == p || NULL == q)
{
return NULL;
}
if(root == q || root == p)
{
return root;
}
min = (p->val > q->val)?q->val:p->val;
max = (p->val > q->val)?p->val:q->val;
if(max < root->val)
{
return lowestCommonAncestor(root->left,p,q);
}
if(min > root->val)
{
return lowestCommonAncestor(root->right,p,q);
}
return root;
}
};