主要是利用二叉搜索树的性质,即左节点一定小于根节点,右节点一定大于根节点。
那么只要从上向下找到一个值介于给定两个节点的值的节点久可以了。
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if (p->val < root->val && q->val < root->val)
return lowestCommonAncestor(root -> left, p, q);
else if ( p->val > root->val && q->val > root->val)
return lowestCommonAncestor(root -> right, p, q);
return root;
}
};
另外实现了一个非递归版的
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
while(root){
if (p->val < root->val && q->val < root->val)
root = root -> left;
else if (p->val > root->val && q->val > root->val)
root = root -> right;
else
break;
}
return root;
}
};