剑指 Offer 68 - I. 二叉搜索树的最近公共祖先
解题思路
本题用 递归
这题有三个大情况:
①p,q都在以root为根的树中,返回p,q的最近公共祖先
②p,q都不在以root为根的树中,返回null
③p,q只有一个在以root为根的树中,返回在树中的那个节点
把情况①(p,q都在以root为根的树中)拎出来看一下细节情况:
①p,q中有一个就是root,比如p==root,则直接返回root,当然,依据情况③,只要p或者q有一个和root相等,就返回哪一个。
②p,q都不等于root,那么对于p,q的公共祖先T来说,T的left肯定就是p,T的right就是q
代码
class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null){
return null;
}
if(root==p||root==q){
return root;
}
TreeNode left=lowestCommonAncestor(root.left,p,q);
TreeNode right=lowestCommonAncestor(root.right,p,q);
if(left!=null&&right!=null){
return root;
}
if(left==null&&right==null){
return null;
}
return left==null?right:left;
}
}