Leetcode 617. 合并二叉树

在这里插入图片描述

心路历程:

看到两颗二叉树的问题,第一反应想到了同频遍历,然后每一步创建新的结点,虽然也写出来了但是代码比较长,而且空间复杂度比较高,好处是没有修改原始的两个二叉树的结果。
后来看了网上的解答,发现可以直接按照修改其中一个二叉树来做,这样代码量会少很多,并且空间复杂度会低,但是这样会导致原来的二叉树被修改。

注意的点:

1、每当调用node.left时都需要保证node不是None
2、当想不明白应该在循环哪一步新建变量时,可以按照循环不变量的角度去思考
3、递归函数return值时,边界return,非边界也要return,是统一的

解法一:同频遍历+创建新的二叉树

# Definition for a binary tree node.
# class TreeNode:
#     def __init__(self, val=0, left=None, right=None):
#         self.val = val
#         self.left = left
#         self.right = right
class Solution:def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:if not root1 and not root2:return Nonenew_root = TreeNode()# 二叉树同频深度遍历def dfs(node1, node2, new_node):if not node1 and not node2: returnif node1 and not node2:new_node.val = node1.valelif not node1 and node2: new_node.val = node2.valelse:new_node.val = node1.val + node2.valif (node1 and node1.left) or (node2 and node2.left):new_node_left = TreeNode()new_node.left = new_node_leftif node1 and node2:dfs(node1.left, node2.left, new_node.left)elif node1 and not node2:dfs(node1.left, None, new_node.left)elif not node1 and node2:dfs(None, node2.left, new_node.left)if (node1 and node1.right) or (node2 and node2.right):new_node_right = TreeNode()new_node.right = new_node_rightif node1 and node2:dfs(node1.right, node2.right, new_node.right)elif node1 and not node2:dfs(node1.right, None, new_node.right)elif not node1 and node2:dfs(None, node2.right, new_node.right)dfs(root1, root2, new_root)return new_root

解法二:修改其中一颗二叉树,递归函数直接返回合并后的一个结点

    def mergeTrees(self, root1: Optional[TreeNode], root2: Optional[TreeNode]) -> Optional[TreeNode]:def dfs(node1, node2):  # 将node2结点合并到node1,返回合并后的node1结点if not node1: return node2if not node2: return node1node1.val += node2.valnode1.left = dfs(node1.left, node2.left)node1.right = dfs(node1.right, node2.right)return node1return dfs(root1, root2)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/583968.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索父进程和子进程

文章目录 通过系统调用查看进程PID父进程、子进程 通过系统调用创建进程-fork初识为什么fork给父进程返回子进程的PID,给子进程返回0fork函数如何做到返回两个值一个变量为什么同时会有两个返回值?bash总结 通过系统调用查看进程PID getpid()函数可以获…

SpringBoot 集成分布式任务调度 XXL-JOB【保姆级上手】

文章目录 XXL-JOB 介绍分布式任务调度XXL-JOB 概述 快速入门下载源码初始化调度数据库编译源码调度中心调度中心介绍配置调度中心部署调度中心集群部署调度中心(可选)Docker 镜像方式搭建调度中心(可选) 执行器执行器介绍添加依赖…

动态系统的稳定性【3】-庞加莱截面

引言: 非线性动力学在众多领域中都得到了较广泛的应用,但各领域研究方向有所不同。在论文中如果涉及到方程的非线性,总会需要定性的分析一下,由于方法比较类似,所以常常也可以参阅别的领域的非线性分析相关的方法或者好…

抖音小店没达人带货?学会这几个话术!精准拿捏!全是干货快收藏

哈喽~我是电商月月 一说抖音小店如何寻找达人,了解过相关知识的人都会背了! 精选联盟的选品广场,达人广场,招商团长! 但操作一学就会,动手就废,商品也挂佣金了,达人也打招呼了&am…

7、Qwen-7B 部署实践

1、Qwen(通义千问)介绍 Qwen(通义千问)由阿里云团队研发,其训练数据覆盖多语言,但主要以中文和英文为主。Qwen的系列模型主要有两类,一类是基座模型Qwen,所谓基座模型,指…

JumpServer 堡垒主机

JumpServer 堡垒机帮助企业以更安全的方式管控和登陆各种类型的资产 SSH:Linux/Unix/网络设备等Windows:Web方式连接/原生RDP连接数据库:MySQL、Oracle、SQLServer、PostgreSQL等Kubernetes:连接到K8s集群中的PodsWeb站点&#x…

Python从0到100(九):Python字符串介绍及使用

一、字符串的定义 1.什么是字符串 字符串是一种表示文本数据的类型。所谓字符串,就是由零个或多个字符组成的有限序列,一般记为: s a 1 a 2 ⋯ a n ( 0 ≤ n ≤ ∞ ) s a_1a_2 \cdots a_n \,\,\,\,\, (0 \le n \le \infty) sa1​a2​⋯a…

电子级高纯PFA材质实验室器皿耗材PFA漏斗PFA试剂瓶PFA烧杯

PFA三角漏斗,整体均是PFA材质,无污染风险,可高压灭菌。 尺寸:外径40mm、160mm PFA三角漏斗 特点: 1、一体式成型,结构稳定; 2、化学耐受性强,耐受强酸、强碱以及各种有机溶剂&…

【成功案例】间隔数月双团伙先后利用某ERP0day实施入侵和勒索的解密恢复项目

1.背景 在2024年3月23日,我们的Solar应急响应团队(以下简称Solar团队)应某公司之邀,介入处理了一起财务系统服务器遭受黑客攻击的事件。该事件导致服务器上大量文件被加密。我们的团队迅速获取了一个被加密的文件,并立…

【Linux学习】Linux 的虚拟化和容器化技术

˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN 如…

【医学嵌入模型】中文医疗文本处理大模型 PCL-MedBERT

中文医疗文本处理大模型 PCL-MedBERT 提出背景对ELECTRA限制的深入分析eHealth的创新方法实体识别关系抽取 总结 最近再做医学项目,需要从文本中抽取医学概念和关系,通用模型的抽取效果还可以。 但还想找医学嵌入模型,能够更准确地从文本中识…

Django 仿博客园练习

数据库搭建 部分功能介绍 【一】注册 (1)效果显示、简单简介 主要亮点 结合了layui和forms组件默认头像可以随着性别的选择发生改变自定义头像可以实时更新显示forms组件报错信息可以局部刷新显示在对应框体下面 没有直接使用layui的前端验证后端验证…