因为二叉搜索树是有序的,左子节点小于父节点,右子节点大于父节点。如果2个节点的最大值小于root节点的值,说明它们的公共父节点在root节点的左子树中;若2个节点的最小值大于root节点的值,说明它们的公共父节点在root节点的右子树中;若一个大于,一个小于,则返回该节点。
<span style="font-size:14px;">public class Solution {
public TreeNode lowestCommonAncestor(TreeNode root, TreeNode p, TreeNode q) {
if(root==null||p==null||q==null)
return null;
if(Math.max(p.val,q.val)<root.val)
return lowestCommonAncestor(root.left,p,q);
else if(Math.min(p.val, q.val)>root.val)
{
return lowestCommonAncestor(root.right,p,q);
}
return root;
}
}</span>