题解 | #二叉搜索树的最近公共祖先#

二叉搜索树的最近公共祖先

http://www.nowcoder.com/practice/d9820119321945f588ed6a26f0a6991f

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

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
全部评论

相关推荐

评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务