根据236的做法,这个就简单了。
递归主要费时间的地方是,分别去左右子树去找,有没有p和q。
利用搜索树的性质,减少递归的次数
如果p和q都小于root,去左边找就行。
如果p和q在两侧的,直接就是root,这个可以通过val来判断。
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
//返回条件一样
//如果往下的过程中,先遇到p或者q,它就是最近祖先
if(root==null||root==p||root==q)
return root;
//都在左边,那p和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);
}else {
//val一个大于一个小于,直接就是自己的
return root;
}
}
来源:https://www.cnblogs.com/weizhibin1996/p/9695118.html