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

该代码实现了一个使用递归的算法,通过前序遍历在二叉树中寻找两个给定点的最低公共祖先。关键在于比较当前节点值与给定点的值,根据比较结果决定是向左子树还是右子树递归查找。如果当前节点值在给定点值之间,则当前节点即为最近公共祖先。

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

2023.6.16
记住只要遇到root.val在p与q之间,这个root就一定是最近公共祖先

自写版,递归的思路是
遇到空节点返还
遇到公共祖先节点返还
其他情况跟下一题有点类似

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        # 使用前序遍历,中左右
        self.p = min(p.val, q.val)
        self.q = max(p.val, q.val)
        return self.getit(root)
    
    def getit(self, root):
        if root == None:
            return None

        if self.p <= root.val <=self.q:
            return root
        
        getleft = self.getit(root.left)
        getright = self.getit(root.right)

        if getleft == None and getright != None:
            return getright
        
        if getleft != None and getright == None:
            return getleft

        if getleft == None and getright == None:
            return None

随想录:
好tmd精简,因为这里每次递归只选择向左或向右,所以直接一条路走到最近公共祖先。

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        # 使用前序遍历,中左右
        self.p = p.val
        self.q = q.val
        return self.getit(root)
    
    def getit(self, root):
        # if root == None:
        #     return None

        if self.p < root.val and self.q < root.val:
            # 向左遍历
            # getleft = self.getit(root.left)
            # if getleft:
            #     return getleft
            return self.getit(root.left)
        
        if self.p > root.val and self.q > root.val:
            # getright = self.getleft(root.right)
            # if getright:
            #     return getright
            return self.getit(root.right)
        
        return root
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值