题解 | #二叉搜索树的最近公共祖先#
二叉搜索树的最近公共祖先
http://www.nowcoder.com/practice/d9820119321945f588ed6a26f0a6991f
- 利用二叉搜索树的性质,当当前节点值比p和q都要大时,说明最小公共节点在左子树上;当当前节点值比p和q都要小时,说明最小公共节点在右子树上
- 当当前节点值介于p和q之间时,说明已经找到最近公共节点
class Solution {
public:
int lowestCommonAncestor(TreeNode* root, int p, int q) {
return FindAncestor(root, p, q)->val;
}
TreeNode* FindAncestor(TreeNode* root, int p, int q){
if(!root) return nullptr;
if(root->val == p || root->val == q)
return root;
if(p < root->val && q < root->val) return FindAncestor(root->left, p, q);
else if(p > root->val && q > root->val) return FindAncestor(root->right, p, q);
else return root;
}
};