617. 合并二叉树 Golang实现

news/2025/2/23 7:01:23/文章来源:https://www.cnblogs.com/CharlseGo/p/18567268

题目描述:

给你两棵二叉树: root1 和 root2 。

想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。

返回合并后的二叉树。

注意: 合并过程必须从两个树的根节点开始。
image
输入:root1 = [1,3,2,5], root2 = [2,1,3,null,4,null,7]
输出:[3,4,5,5,4,null,7]

思路分析:

这个题目是第一次遇到的同时处理两个二叉树的问题。但是和单颗二叉树处理方法类似的关键在于:合并两个二叉树,如果树的结果一致,直接合并,不一致的时候,比如root1没有左子树,root2有。则直接root1.Right = root2.Right即可。
下面是一个自顶向下的递归实现,当遍历到某个树的叶子节点就return。

点击查看代码
func mergeTrees(root1 *TreeNode, root2 *TreeNode) *TreeNode {if root1==nil{return root2}if root2 == nil {return root1}root1.Val+=root2.Valroot1.Left = mergeTrees(root1.Left,root2.Left)root1.Right = mergeTrees(root1.Right,root2.Right)return root1
}

迭代做法

用层序遍历来解决这个问题,当两棵树的每层都是满的时候才进行层序入队,某则就是某颗有空树,就直接进行拼接,不能进行入队操作。

点击查看代码
func mergeTrees(t1 *TreeNode, t2 *TreeNode) *TreeNode {// 如果 t1 为空,直接返回 t2if t1 == nil {return t2}// 如果 t2 为空,直接返回 t1if t2 == nil {return t1}// 初始化队列que := []*TreeNode{t1, t2}// 使用队列进行层次遍历for len(que) > 0 {// 从队列中弹出两个节点node1 := que[0]que = que[1:]node2 := que[0]que = que[1:]// 合并两个节点的值node1.Val += node2.Val// 如果两个树的左节点都不为空,加入队列if node1.Left != nil && node2.Left != nil {que = append(que, node1.Left, node2.Left)}// 如果 t1 的左节点为空而 t2 的左节点不为空,就赋值过去if node1.Left == nil && node2.Left != nil {node1.Left = node2.Left}// 如果两个树的右节点都不为空,加入队列if node1.Right != nil && node2.Right != nil {que = append(que, node1.Right, node2.Right)}// 如果 t1 的右节点为空而 t2 的右节点不为空,就赋值过去if node1.Right == nil && node2.Right != nil {node1.Right = node2.Right}}return t1
}

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

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

相关文章

FUSE 透传

Android 12 支持 FUSE 透传功能,此功能可以最大限度地降低 FUSE 开销,从而实现可媲美直接访问下层文件系统的性能。android12-5.4、android12-5.10 和 android-mainline(仅限测试)内核支持 FUSE 透传功能,这意味着是否支持此功能取决于设备使用的内核和设备搭载的 Android…

易基因:转录因子Pax5在多西紫杉醇耐药性神经内分泌样前列腺癌中的表观调控作用|Cell Death Dis

大家好,这里是专注表观组学十余年,领跑多组学科研服务的易基因。 前列腺癌患者在接受雄激素受体信号抑制剂(ARSI)治疗后,可能会出现耐药性,导致治疗诱导的神经内分泌样前列腺癌(therapy-induced neuroendocrine-like prostate cancer,t-NEPC)发生。t-NEPC是一种高侵袭性…

反向 Debug 了解一下?揭秘 Java DEBUG 的基本原理

Debug 的时候,都遇到过手速太快,直接跳过了自己想调试的方法、代码的时候吧…… 一旦跳过,可能就得重新执行一遍,准备数据、重新启动可能几分钟就过去了。好在IDE 们都很强大,还给你后悔的机会,可以直接删除某个 Stack Frame,直接返回到之前的状态,确切的说是返回到之前…

记录一次RPC服务有损上线的分析过程

1. 问题背景 某应用在启动完提供JSF服务后,短时间内出现了大量的空指针异常。 分析日志,发现是服务依赖的藏经阁配置数据未加载完成导致。即所谓的有损上线或者是直接发布,当应用启动时,service还没加载完,就开始对外提供服务,导致失败调用。 关键代码如下 数据的初始化加…

阿里二面:如何设计一个高并发系统?

大家好,我是苏三,又跟大家见面了。 前言 最近有位粉丝问了我一个问题:如何设计一个高并发系统? 这是一个非常高频的面试题,面试官可以从多个角度,考查技术的广度和深度。 今天这篇文章跟大家一起聊聊高并发系统设计一些关键点,希望对你会有所帮助。1 页面静态化 对于高并…

Linux之CPU调度策略和CPU亲和性

一、调度策略 调度进程 单个 CPU一次只能执行一个进程,虽然 Linux 系统通过使用多任务同时处理多个进程,但当多个进程同时运行在一个CPU 上时,它通过交错执行这些进程。 内核使用进程调度器来决定在某一时间点上哪个进程在运行。调度器必须平衡几个选项:快速决定下一个该运…

Linux之CPU调度策略

调度进程 单个 CPU一次只能执行一个进程,虽然 Linux 系统通过使用多任务同时处理多个进程,但当多个进程同时运行在一个CPU 上时,它通过交错执行这些进程。 内核使用进程调度器来决定在某一时间点上哪个进程在运行。调度器必须平衡几个选项:快速决定下一个该运行的进程进程可…

2025年IT项目经理必看!9大项目管理平台完全对比,选错软件你后悔一辈子!

一、引言2025 年,IT 项目管理面临着更多的挑战和机遇。选择合适的项目管理平台对于 IT 项目经理来说至关重要,一个好的平台能够提高项目管理效率,确保项目顺利进行。本文将对 2025 年九大热门项目管理平台进行全面对比,帮助 IT 项目经理做出明智的选择。 在当今数字化时代,…

Unity版本使用情况统计(更新至2024年11月)

UWA发布|本期UWA发布的内容是第十五期Unity版本使用统计,统计周期为2024年5月至2024年11月,数据来源于UWA网站(www.uwa4d.com)性能诊断提测的项目。希望给Unity开发者提供相关的行业趋势作为参考。2024年5月 - 2024年11月版本分布 以近半年的数据统计来看,如图1所示,2…

sql学习~

一.mysql数据模型二.sql简介三、mysql通用语法 1.注释 单行注释。-- 内容(注意空格) 多行注释。/* 内容 */ 2.不区分大小写 3.分号结尾。 四、sql分类1.DDL 1>进入mysql mysql -uroot -p+密码 2>操作数据库查询数据库show databases; 创建数据库create database 数据库…

Qt 打包为可执行文件(详解)

https://blog.csdn.net/dfr110719/article/details/136992619<div id="content_views" class="htmledit_views"><p id="main-toc"><strong>目录</strong></p> 一.打包为文件夹 二.打包为可执行文件(.exe) 当我…

关于train, evaluate 和 作图——dymean3

TMscore 从代码实现来看,这里的 TMscore 计算是通过调用外部的 TMscore 可执行程序完成的,输入的 PDB 文件包含了原子的三维坐标信息。那么具体答案可以分以下几个方面来分析: 1. 是否只对 CA 坐标进行计算答案:否。 TMscore 通常会基于整个 PDB 文件中所有原子的坐标计算分…