此题比236简单之处在于可以充分利用二叉搜索树的特性,当p和root的差值和q和root的差值符号相异,说明p q肯定在root的两个不同子树中,最近公共祖先就是root。当p q两个结点值都小于根节点时,递归左子树,反之递归右子树。
class Solution {
public:
TreeNode* lowestCommonAncestor(TreeNode* root, TreeNode* p, TreeNode* q) {
if((p->val - root->val) * (q->val - root->val) <= 0) return root;
else if(p->val < root->val && q->val < root->val){
return lowestCommonAncestor(root->left, p, q);
} else {
return lowestCommonAncestor(root->right, p, q);
}
}
};
本文介绍了一种利用二叉搜索树特性寻找最近公共祖先的高效算法。当p和q节点值分别位于根节点两侧,最近公共祖先是当前根节点;若都小于根节点值,则递归左子树;反之递归右子树。
327

被折叠的 条评论
为什么被折叠?



