当前位置: 首页 > article >正文

【LeetCode刷题日记】617.合并二叉树(空间换安全,还是原地省内存)

个人主页北极的代码欢迎来访作者简介java后端学习者❄️个人专栏苍穹外卖日记SSM框架深入JavaWeb✨命运的结局尽可永在不屈的挑战却不可须臾或缺前言大家好我是代码不加冰在这里先祝大家周末愉快然后来到我们每日刷题的环节嗯在此之前我都是想着上午刷题然后顺带着把文章发了但是每次上午都有课然后有时候还起不来所以每次都拖到了下午甚至晚上如果有时间还是每天多刷几题感觉进度有点慢了效率不是很高。摘要本文介绍了合并两棵二叉树的两种方法原地修改法和新建树法。原地修改法直接在root1上进行节点值相加节省空间但会破坏原树结构新建树法则创建全新节点保留原树但消耗更多内存。两种方法均采用深度优先搜索递归实现时间复杂度均为O(min(m,n))。文章通过代码对比和优缺点分析帮助开发者根据实际需求选择合适方案强调了在内存敏感场景下原地修改的优势以及在需要保留原树时的新建树方案。题目背景617.合并二叉树给你两棵二叉树root1和root2。想象一下当你将其中一棵覆盖到另一棵之上时两棵树上的一些节点将会重叠而另一些不会。你需要将这两棵树合并成一棵新二叉树。合并的规则是如果两个节点重叠那么将这两个节点的值相加作为合并后节点的新值否则不为null 的节点将直接作为新二叉树的节点。返回合并后的二叉树。注意:合并过程必须从两个树的根节点开始。示例 1输入root1 [1,3,2,5], root2 [2,1,3,null,4,null,7]输出[3,4,5,5,4,null,7]示例 2输入root1 [1], root2 [1,2]输出[2,2]提示两棵树中的节点数目在范围[0, 2000]内-104 Node.val 104题目分析整体思路我们拿到这个题目先分析题目需求合并二叉树先从整体上来看就是把两个二叉树进行叠加。之后就是细微的操作相同节点位置的进行节点值的相加依次叠加思维不难具体代码可能看着不是很好实现我们一起来看看吧。代码思路首先我们就要考虑如何找到两棵二叉树的节点位置那么自然就是遍历了这里用什么遍历方法呢其实这里并没有要求因此三种方法都可以。关键是要同时遍历两棵树。合并的方式有两种创建新树每次创建新节点值由两棵树对应节点的值决定都有则相加只有一棵则取该值原地修改复用第一棵树的结构将其值加上第二棵树对应位置的值无论哪种方式当两棵树的对应节点都存在时新节点的值需要两棵树共同提供若只有一棵树有节点则直接继承该节点。具体操作利用递归的方式来实现1.那么首先我们就要先确定递归函数的需要传入的参数和返回值我们既然要同时遍历两颗树那么传入的参数自然就是两棵二叉树的根节点返回值自然就是新的构建的合并二叉树的根节点之后依次递归2.然后确定终止条件因为是传入了两个树那么就有两个树遍历的节点t1 和 t2如果t1 NULL 了两个树合并就应该是 t2 了如果t2也为NULL也无所谓合并之后就是NULL。反过来如果t2 NULL那么两个数合并就是t1如果t1也为NULL也无所谓合并之后就是NULL。3.确定单层递归的逻辑在这里我们需要明确的是我们这里利用的并不是直接构建了一棵新的树而是在第一棵树的基础上进行的叠加。但同时也会破坏原来的树但是节省内存不创建新节点深度优先搜索原地修改思路直接在root1上进行修改将root2的值合并到root1上节省空间。/** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val val; * this.left left; * this.right right; * } * } */ class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { if (root1 null) return root2; if (root2 null) return root1; // 直接在root1上修改 root1.val root2.val; root1.left mergeTrees(root1.left, root2.left); root1.right mergeTrees(root1.right, root2.right); return root1; } }我们也可以自己构建一个新的树深度优先搜索DFS递归思路同时遍历两棵树对应位置相加后创建新节点递归处理左右子树。只需要自己构建一个新的根节点即可。java /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode() {} * TreeNode(int val) { this.val val; } * TreeNode(int val, TreeNode left, TreeNode right) { * this.val val; * this.left left; * this.right right; * } * } */ class Solution { public TreeNode mergeTrees(TreeNode root1, TreeNode root2) { // 边界情况其中一棵树为空直接返回另一棵 if (root1 null) return root2; if (root2 null) return root1; // 两棵树都不为空创建新节点值为两节点值之和 TreeNode merged new TreeNode(root1.val root2.val); // 递归合并左右子树 merged.left mergeTrees(root1.left, root2.left); merged.right mergeTrees(root1.right, root2.right); return merged; } }代码对比对比项方法一创建新树方法二原地修改核心代码TreeNode merged new TreeNode(root1.val root2.val)root1.val root2.val是否创建新节点✅ 是每层递归都 new❌ 否直接在原节点上修改是否修改原树❌ 否root1和root2保持不变✅ 是root1被改变返回结果返回新创建树的根节点返回修改后的root1优缺点对比维度方法一创建新树方法二原地修改空间复杂度O(min(m,n)) 新树空间O(min(m,n))额外内存需要创建新节点约 mn 个节点几乎无额外内存是否破坏原数据❌ 不破坏✅ 破坏 root1函数纯度✅ 纯函数无副作用❌ 有副作用可重入性✅ 可重复调用❌ 原数据被改后无法恢复结语如果对你有帮助请点赞关注收藏你的支持就是我最大的鼓励

相关文章:

【LeetCode刷题日记】617.合并二叉树(空间换安全,还是原地省内存)

🔥个人主页:北极的代码(欢迎来访) 🎬作者简介:java后端学习者 ❄️个人专栏:苍穹外卖日记,SSM框架深入,JavaWeb ✨命运的结局尽可永在,不屈的挑战却不可须臾或…...

APKToolGUI:让Android逆向变得像搭积木一样简单

APKToolGUI:让Android逆向变得像搭积木一样简单 【免费下载链接】APKToolGUI GUI for apktool, signapk, zipalign and baksmali utilities. 项目地址: https://gitcode.com/gh_mirrors/ap/APKToolGUI 你是否曾经想要修改一个Android应用,却发现需…...

如何用bsf创建第一个3D场景:从零开始的完整教程

如何用bsf创建第一个3D场景:从零开始的完整教程 【免费下载链接】B3DFramework Modern C library for the development of real-time graphical applications 项目地址: https://gitcode.com/gh_mirrors/bs/B3DFramework bsf(B3DFramework&#x…...

Gramophone安全与权限管理:Android 13+存储权限最佳实践

Gramophone安全与权限管理:Android 13存储权限最佳实践 【免费下载链接】Gramophone A sane music player built with media3 and material design library that is following androids standard strictly. 项目地址: https://gitcode.com/gh_mirrors/gr/Gramopho…...

苹果CMS V10终极指南:3步打造专业视频网站,新手也能轻松上手

苹果CMS V10终极指南:3步打造专业视频网站,新手也能轻松上手 【免费下载链接】maccms10 苹果cms-v10,maccms-v10,麦克cms,开源cms,内容管理系统,视频分享程序,分集剧情程序,网址导航程序,文章程序,漫画程序,图片程序 项目地址: https://gitcode.com/gh…...

Qt5 super module网络编程指南:WebSocket、HTTP、MQTT通信实现

Qt5 super module网络编程指南:WebSocket、HTTP、MQTT通信实现 【免费下载链接】qt5 Qt5 super module 项目地址: https://gitcode.com/gh_mirrors/qt/qt5 Qt5 super module是一个功能强大的跨平台应用程序开发框架,提供了丰富的网络编程功能&…...

ng-demos构建工具对比:Grunt vs Gulp在Angular项目中的实战应用

ng-demos构建工具对比:Grunt vs Gulp在Angular项目中的实战应用 【免费下载链接】ng-demos variety of angular demos 项目地址: https://gitcode.com/gh_mirrors/ng/ng-demos 在Angular项目开发中,构建工具的选择直接影响开发效率和项目维护性。…...

MVVMFramework性能优化:让你的iOS应用运行如飞的10个技巧

MVVMFramework性能优化:让你的iOS应用运行如飞的10个技巧 【免费下载链接】MVVMFramework (OC版)总结整理下一个快速开发框架,以更优雅的方式写代码,做一个代码艺术家。分离控制器中的代码,已加入cell自适应高度,自动缓…...

独立开发者如何利用Taotoken同时管理多个AI项目的模型调用

🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 独立开发者如何利用Taotoken同时管理多个AI项目的模型调用 对于独立开发者而言,同时维护多个小型产品是常态。每个产品…...

ElevenLabs支持广西话吗?2024最新实测结果曝光:仅2个API参数决定能否合成地道“梧州腔”

更多请点击: https://intelliparadigm.com 第一章:ElevenLabs广西话语音支持的现状与背景 ElevenLabs 作为全球领先的AI语音合成平台,目前尚未在官方API文档、语言列表或控制台界面中提供对广西话(含南宁白话、梧州话、玉林话等粤…...

Rust-Bio 生物信息学库入门指南:5个简单步骤快速上手

Rust-Bio 生物信息学库入门指南:5个简单步骤快速上手 【免费下载链接】rust-bio This library provides implementations of many algorithms and data structures that are useful for bioinformatics. All provided implementations are rigorously tested via co…...

MATLAB CGCS2000高斯投影坐标转经纬度坐标

坐标系转换这边需要用到mapping toolbox 首先根据原始(x,y)坐标对应的投影坐标系查询EPSG编号 例如这边CGCS2000 / 3-degree Gauss-Kruger CM 123E的编号就是4450 对应的编号可以https://blog.csdn.net/qq_41441896/article/details/104525296在这篇博…...

SABIC工程塑料创新材料解决方案与发展前景分析

SABIC工程塑料凭借其卓越的耐高温性、机械强度及化学稳定性,成为高端制造领域不可或缺的创新材料解决方案。其未来发展将深度契合汽车轻量化、5G通信及新能源产业升级需求,市场前景广阔。工程塑料作为高端制造业的核心基础材料,其性能直接决定…...

SABIC原GE塑料原料全面解析与市场应用

SABIC原GE塑料原料凭借其卓越的性能稳定性与广泛的应用适配性,成为众多制造企业的优选材料。作为国际一线工程塑料品牌,其产品涵盖PETG、PCTGG、PC、PA66等全品类,通过源头直采模式可为下游企业降低15%-18%采购成本,并提供全流程技…...

深度解析沙伯基础创新塑料:年度十大高口碑产品权威榜单揭晓新选择

在制造业转型升级的关键节点,工程塑料作为工业生产的"粮食",其品质稳定性与供应链效率直接关乎企业核心竞争力。然而当前市场存在明显的价值悖论:一方面下游企业对高性能材料需求持续攀升,另一方面却陷入"高价采购…...

SABIC塑料:2026年精选十大高品质产品权威榜单揭晓,重塑行业新选择

在制造业转型升级的关键节点,工程塑料作为工业生产的"粮食",其品质稳定性与供应链效率直接关乎企业核心竞争力。然而行业长期存在的信息壁垒与价值陷阱,让许多采购决策陷入"高价换低效"的困境——据中国塑料加工工业协会…...

【YOLO全系列架构演进史】2 YOLOv8:解耦头、Anchor-free与多任务统一框架

YOLOv8:解耦头、Anchor-free与多任务统一框架 1.1 总体定位与认知地图 1.1.1.1 我们为什么需要重新理解YOLOv8 YOLOv8在2023年发布时,很多人以为它只是YOLOv5的增量升级。但如果我们把神经网络看作一条工厂流水线,YOLOv8实际上把整条流水线的三个核心工位都换了:原料处理…...

为什么你的DeepSeek微调收敛慢?揭秘Attention初始化偏差导致的3轮内loss震荡——附自动校准工具脚本

更多请点击: https://intelliparadigm.com 第一章:DeepSeek注意力机制优化 DeepSeek系列模型在长上下文建模中对标准Transformer注意力进行了系统性重构,核心聚焦于降低计算复杂度与提升内存局部性。其注意力优化并非单一技术点叠加&#xf…...

DeepSeek V2多模态支持真相(官方未公开的API隐藏能力全披露)

更多请点击: https://codechina.net 第一章:DeepSeek V2多模态支持真相(官方未公开的API隐藏能力全披露) DeepSeek V2 官方文档明确声明为纯文本大模型,但逆向分析其生产环境 API 流量与响应头后发现:其底…...

“我35岁,年薪50万,却觉得自己是个‘废人’”

你有过那种感觉吗?回头一看,工作了十年,简历上好像什么都做过,但心里却虚得要命,觉得自己随时可以被替代。尤其是当“35岁”这个魔咒般的年龄落在你头上时,这种恐慌感在深夜会加倍袭来。凌晨两点&#xff0…...

企业级Sora 2 API接入终极 checklist:23项必检项(含AWS/Azure/GCP三云环境差异对照表)

更多请点击: https://intelliparadigm.com 第一章:企业级Sora 2 API接入终极 checklist:23项必检项(含AWS/Azure/GCP三云环境差异对照表) 接入企业级 Sora 2 API 前,必须完成覆盖身份认证、网络策略、合规…...

2026年,揭秘浙江废铝回收界的明星企业!

引言:废铝回收,绿色循环的先锋随着我国经济的快速发展和工业生产的不断扩大,废铝回收行业逐渐成为资源循环利用的重要环节。在浙江省,众多废铝回收企业脱颖而出,其中腾兰再生资源回收有限公司以其卓越的表现&#xff0…...

服务间鉴权的方式

服务间鉴权的方式1. API Key(静态密钥)Java 中如何生成随机数:什么是 LCG?/dev/random 和 /dev/urandom 详解1. Math.random() —— 绝对禁用2. java.util.Random —— 明文禁止(安全场景)3. java.security…...

爆仓价格系数推导

多仓 爆仓条件&#xff1a;账户权益 < 维持保证金 即&#xff1a; Equity Maintenance Margin对于一个仓位&#xff1a; 多仓 权益&#xff1a; 权益 初始权益 (当前价 - 开仓价) 数量因为&#xff1a; 价格上涨赚钱。 空仓 权益&#xff1a; 权益 初始权益 (开仓价 -…...

如何高效管理华硕笔记本性能:G-Helper轻量级控制工具完整指南

如何高效管理华硕笔记本性能&#xff1a;G-Helper轻量级控制工具完整指南 【免费下载链接】g-helper Lightweight Armoury Crate alternative for Asus laptops with nearly the same functionality. Works with ROG Zephyrus, Flow, TUF, Strix, Scar, ProArt, Vivobook, Zenb…...

Vue-Tree-List 实战指南:构建现代化树形结构的终极方案

Vue-Tree-List 实战指南&#xff1a;构建现代化树形结构的终极方案 【免费下载链接】vue-tree-list &#x1f332;A vue component for tree structure 项目地址: https://gitcode.com/gh_mirrors/vu/vue-tree-list 在现代前端开发中&#xff0c;树形结构是处理层级数据…...

FPGA 时序优化理论手册

定位:为时序优化手册中每一条规则、每一段代码背后的"为什么"提供物理直觉与数学原理 阅读方式:先读本手册建立理解,再回看时序优化手册对应的操作和代码 目录 第 1 部分 时序分析的物理基础第 1 章 数字电路中的时间:从晶体管到时序公式第 2 章 建立时间与保…...

深度拆解:TypeScript 大神把 .claude 目录开源,18 个 Skill 是给 AI 编程踩刹车的工程纪律

2026 年 4 月底&#xff0c;Total TypeScript 创始人、TypeScript 社区教父级人物 Matt Pocock 干了一件挺简单的事——把他个人 .claude 目录下的全部 Agent Skills 开源了。仓库叫 mattpocock/skills&#xff0c;副标题只有一句话&#xff1a;Skills for Real Engineers。一个…...

AI动态简报之技术前沿篇(2026.05.22)

&#x1f4c5; 2026年5月22日 | 关注方向&#xff1a;AI技术突破 大模型创新 AI Agent 生成式AI 多模态AI &#x1f525; 第1条&#xff1a;谷歌I/O 2026三箭齐发——Gemini 3.5 Flash速度碾压4倍、Spark全天候Agent、Omni全栈多模态 核心内容&#xff1a; 谷歌I/O 2026以…...

Prompt Engineering、Context Engineering 与 Harness Engineering 的异同点

在大型语言模型&#xff08;LLM&#xff09;应用开发中&#xff0c;随着模型能力的提升&#xff0c;单纯依靠“写提示词”已经无法满足复杂、稳定、可落地的生产需求。于是&#xff0c;Prompt Engineering&#xff08;提示工程&#xff09;、Context Engineering&#xff08;上…...