力扣日刷47-补

236.二叉树的最近公共祖先

这一题的逻辑说句实话也是非常地难懂。下面我来做一个总结吧:

首先,我们的边界条件是,如果节点为空或者节点是pq其中一个返回节点的值。

然后我们进行后序的遍历。这个遍历相当于是去刨根问底一定要找到p或者q或者所有的节点。因为我们设置了返回条件,所以只有当确实到底了或者找到结点的时候才能返回,然后我们便是要去判断是不是公共祖先,当左边返回来有值,右边也返回来有值的时候这个节点就是我们要的最近祖先,如果左边有值,右边没值的话,返回左边的节点。如果右边有值,返回右边的节点。

python 复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        if root is None or root is p or root is q:
            return root
        
        left = self.lowestCommonAncestor(root.left,p,q)
        right = self.lowestCommonAncestor(root.right,p,q)

        if left and right:
            return root
        
        if left:
            return left
        
        
        return right

        

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

这一道题是这样的,跟上一题差不多这一题,会更简单一点,这一题用到的是更加简易的判断。返回递归条件设置为了当两个值都在一侧的时候进入迭代,在哪一侧就进入哪一侧。然后直到p跟q的值在当前节点的两边。此时的节点就是我们需要的节点

python 复制代码
# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None

class Solution:
    def lowestCommonAncestor(self, root: 'TreeNode', p: 'TreeNode', q: 'TreeNode') -> 'TreeNode':
        x = root.val

        if p.val <x and q.val<x:
            return self.lowestCommonAncestor(root.left,p,q)
        if p.val > x and q.val > x:
            return self.lowestCommonAncestor(root.right,p,q)
        
        return root
相关推荐
java_nnnn2 分钟前
LeetCode刷题滑动窗口(长度最小的子数组)
算法·leetcode·职场和发展
用户0332126663675 分钟前
如何快速拆分超大 Excel 文件【Python 教程】
python·excel
@atweiwei6 分钟前
训练 AI 大模型系列之 LoRA:不动模型本体,靠一条低秩旁路改专长(附完整手算算例)
人工智能·算法·ai·语言模型·rag
kimnoic10 分钟前
Python中使用封装类还是函数以及它们的区别
开发语言·python
青柠之夏cc15 分钟前
Python Java PHP底层对比:内存并发性能全解析
开发语言·python·线程
TomEval15 分钟前
【测AI】第10篇:AI 模型功能测试实战 —— 测试用例怎么设计?
人工智能·python·功能测试·测试用例
半亩码田21 分钟前
C#转Python第5.1篇:异步编程:asyncio vs async/await,语法相似但机制不同
开发语言·python·c#
yi01124 分钟前
DAY27: LeetCode 110. 平衡二叉树 | 在递归中判断是否平衡
人工智能·笔记·python·算法·leetcode·二叉树·递归
96245639 分钟前
餐饮 SaaS 优惠券系统架构演进(七)营销定价引擎设计:活动、会员价、优惠券、买赠如何在同一 PriceQuote 中可解释地组合
java·运维·算法
言乐61 小时前
PythonLOLM自动生成复盘报告模型
开发语言·前端·数据库·人工智能·python