思路:基于二叉搜索树的特点,左边小于根节点,右边大于根节点

1、o1、o2分布在当前节点两边,则当前节点为公共祖先

2、当前节点为o1或o2,当前节点为祖先

3、o1、o2均在当前节点左边,递归查找左子树

4、o1、o2均在当前节点右边,递归查找右子树

class Solution:
    def lowestCommonAncestor(self , root: TreeNode, p: int, q: int) -> int:
        
        if not root:
            return -1
        
        if (root.val - p) * (root.val - q) <= 0: # 情形1、2
            return root.val
        elif root.val < p and root.val < q:
            return self.lowestCommonAncestor(root.right, p, q) # 情形4
        elif root.val > p and root.val > q:
            return self.lowestCommonAncestor(root.left, p, q) # 情形3