力扣刷题TOP101: 25.BM32合并二叉树

目录:

目的

思路

复杂度

记忆秘诀

python代码

目的:

已知两颗二叉树,将它们合并成一颗二叉树。合并规则是:都存在的结点,就将结点值加起来,否则空的位置就由另一个树的结点来代替。


思路

我们有两棵二叉树,目标是将这两棵树合并成一棵新的树,规则如下:

  1. 如果两个节点都有值,就把它们的值加起来,生成一个新的节点。
  2. 如果其中一个节点没有值(即为空),就直接返回另一个节点。
  3. 继续递归地合并两个树的左子树和右子树。

检查工作:

  • 如果两棵树的当前节点都为空 :返回 None,表示没有节点需要合并。
  • 如果一个节点为空 :如果 t1 为空,那么直接返回 t2,如果 t2 为空,则返回 t1,这样合并过程中可以"跳过"空节点。

开始合并:如果两个节点都不为空

  • 合并它们的值,创建一个新的节点,将这两个树的左子树和右子树递归地合并:
  • 递归调用 mergeTrees(t1.left, t2.left) 合并左子树。
  • 递归调用 mergeTrees(t1.right, t2.right) 合并右子树。

返回合并后的树(merged)。


复杂度

  • 时间复杂度:O( n)

    • 对每个节点只进行了访问一次,其中 n 是两棵树中节点的总数。
  • 空间复杂度:O(n )

    • 递归调用栈的深度等于树的高度。在最坏的情况下(完全不平衡的树),空间复杂度为 O(n) ,在最好的情况下(平衡的树),空间复杂度为 O(log n)。

记忆秘诀

  • 节点为空的情况:遇到空节点时,直接跳过返回。
  • 值相加的情况:两个节点都有值时,它们的值会加起来生成一个新节点。
  • 递归合并子树:左右子树分别递归合并,形成最终的合并树。

python代码

python 复制代码
class TreeNode:
    def __init__(self, x):
        self.val = x
        self.left = None
        self.right = None

class Solution:
    def mergeTrees(self, t1: TreeNode, t2: TreeNode) -> TreeNode:
        # 如果t1和t2都为空,返回空
        if not t1 and not t2:
            return None
        # 如果t1为空,返回t2
        if not t1:
            return t2
        # 如果t2为空,返回t1
        if not t2:
            return t1
        
        # 创建新的节点,值为t1和t2的值之和
        merged = TreeNode(t1.val + t2.val)
        
        # 递归合并左子树和右子树
        merged.left = self.mergeTrees(t1.left, t2.left)
        merged.right = self.mergeTrees(t1.right, t2.right)
        
        return merged  # 返回合并后的树

* 欢迎大家探讨新思路,能够更好的理解和记忆

相关推荐
信誓旦旦的程序猿5 分钟前
【Python量化实战宝典 #08】可转债与债券接口手册:转股价·溢价率·纯债价值(Python 可跑)
java·python·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
砚底藏山河10 分钟前
python量化:行情数据回溯
java·开发语言·python·金融·maven
今年下半年13 分钟前
AI智能体项目实战记录(02):初始化 Python 项目
开发语言·人工智能·python·fastapi
Williamtym23 分钟前
PickGo Lab实践:用浏览器、Python和MCP串起机器人搬运仿真
开发语言·python·机器人
HPtiger23 分钟前
数据结构——选择排序
数据结构·算法·排序算法
康实训31 分钟前
老年评估仿真实训平台架构设计与老年人能力评估实训室教学落地实践
大数据·人工智能·算法·实训室·实训室建设
DongQiShanRen1 小时前
六根硬件映射(四):归属澄清、两处不一致与卷十一总表
开发语言·人工智能·算法·rust·哈希算法·集成学习
CS创新实验室1 小时前
Python 对象“死“了之后去了哪?——引用计数与分代垃圾回收
开发语言·jvm·python
CCblandy1 小时前
雪花 ID 四个边界实测:时钟回拨重号 500 个,前端 JSON.parse 直接丢精度
后端·python·算法·性能优化·架构
quantdash_cc1 小时前
Pandas 处理分钟级股票行情:从原始数据清洗到 K 线聚合
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash