235-236. Lowest Common Ancestor of a Binary Search Tree [Easy & Medium] 最小父节点

博客主要介绍了两个内容,一是二叉搜索树的最近公共祖先,若大于最大值,所求在左子树,小于最小值,所求在右子树,否则返回当前节点;二是二叉树的最近公共祖先,但未详细阐述其求解方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

235. Lowest Common Ancestor of a Binary Search Tree

17368230-8048f67b3f9678df.png
235. Lowest Common Ancestor of a Binary Search Tree
  • 如果大于最大值,则所求在左子树,如果小于最小值,则所求在右子树,否则,返回当前节点
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    #循环
    def lowestCommonAncestor(self, root, p, q):
        """
        :type root: TreeNode
        :type p: TreeNode
        :type q: TreeNode
        :rtype: TreeNode
        """
        while root:
            if root.val > max(p.val, q.val):
                root = root.left
            elif root.val < min(p.val, q.val):
                root = root.right
            else:
                return root

    #递归
    def lowestCommonAncestor(self, root, p, q):
        """
        :type root: TreeNode
        :type p: TreeNode
        :type q: TreeNode
        :rtype: TreeNode
        """
        if root.val > max(p.val, q.val):
            return self.lowestCommonAncestor(root.left, p, q)
        elif root.val < min(p.val, q.val):
            return self.lowestCommonAncestor(root.right, p, q)
        else:
            return root

    #找路径后比较
    def lowestCommonAncestor(self, root, p, q):
        """
        :type root: TreeNode
        :type p: TreeNode
        :type q: TreeNode
        :rtype: TreeNode
        """
        l1 = self.findPath(root, p)
        l2 = self.findPath(root, q)
        res = root
        for i in range(min(len(l1), len(l2))):
            if l1[i] == l2[I]:
                res = l1[I]
            else:
                break
        return res
    
    def findPath(self, root, p):
        res = []
        while root.val != p.val:
            res.append(root)
            if root.val > p.val:
                root = root.left
            else:
                root = root.right
        res.append(p)
        return res

236. Lowest Common Ancestor of a Binary Tree

17368230-8e4bbf631fb37a5b.png
236. Lowest Common Ancestor of a Binary Tree
# Definition for a binary tree node.
# class TreeNode(object):
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution(object):
    def lowestCommonAncestor(self, root, p, q):
        """
        :type root: TreeNode
        :type p: TreeNode
        :type q: TreeNode
        :rtype: TreeNode
        """
        mydic = {}
        l1 = self.findPath(root, p)
        l2 = self.findPath(root, q)
        res = root
        for i in range(min(len(l1), len(l2))):
            if l1[i] == l2[I]:
                res = l1[I]
            else:
                break
        return res

    def findPath(self, root, p):
        res = []
        mydic = {}
        qu = [root]
        while qu:
            node = qu.pop(0)
            if node == p:
                break
            else:
                if node.left:
                    qu.append(node.left)
                    mydic[node.left] = node
                if node.right:
                    qu.append(node.right)
                    mydic[node.right] = node
        while node != root:
            res.append(node)
            node = mydic[node]
        res.append(root)
        return res[::-1]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值