题目:Given a binary search tree (BST), find the lowest common ancestor (LCA) of two given nodes in the BST.
解析:二分搜索树的性质是根节点的值要大于左孩子节点的值,小于右子孩子节点的值。根据这一性质,我们只需判断给定两个节点的值与根节点的大小关系即可。如果两个值都小于根节点的值,则再去左子树继续寻找;如果两个值都大于根节点的值,则再去右子树继续寻找;否则,他们的最近的公共父节点就是根节点。代码如下:
/**
* Definition for a binary tree node.
* struct TreeNode {
* int val;
* TreeNode *left;
* TreeNode *right;
* TreeNode(int x) : val(x), left(NULL), right(NULL) {}
* };
*/
class Solution {
public:
TreeNode* isInSameSide(TreeNode* root,TreeNode* p,TreeNode* q){
if(p->val<root->val && q->val<root->val)
{
root=root->left;
isInSameSide(root,p,q);
}
else if(p->val>root->val && q->val>root->val)
{
root=root->right;
isInSameSide(root,p,q);
}
else
return root;
}
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
return isInSameSide(root,p,q);
}
};