思路:
1. 还是那句话,关于二叉树的问题一定要想到用递归,而递归是不关心方法的具体实现的。
2. 再想想二叉搜索树的特点,root的值是比左边大,比右边小的。所以如果p和q一个在左一个在右,那最近的公共祖先就是root。
3. 如果都在左边,那就把left结点传进方法中作为root结点,继续寻找公共祖先。反之。
代码:
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);
if(p.val >root.val && q.val >root.val)
return lowestCommonAncestor(root.right,p,q);
return root;
}
}