617. 合并二叉树 Golang实现
题目描述:
给你两棵二叉树: root1 和 root2 。
想象一下,当你将其中一棵覆盖到另一棵之上时,两棵树上的一些节点将会重叠(而另一些不会)。你需要将这两棵树合并成一棵新二叉树。合并的规则是:如果两个节点重叠,那么将这两个节点的值相加作为合并后节点的新值;否则,不为 null 的节点将直接作为新二叉树的节点。
返回合并后的二叉树。
注意: 合并过程必须从两个树的根节点开始。

输入: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.Val
root1.Left = mergeTrees(root1.Left,root2.Left)
root1.Right = mergeTrees(root1.Right,root2.Right)
return root1
}
迭代做法
用层序遍历来解决这个问题,当两棵树的每层都是满的时候才进行层序入队,某则就是某颗有空树,就直接进行拼接,不能进行入队操作。
点击查看代码
func mergeTrees(t1 *TreeNode, t2 *TreeNode) *TreeNode {
// 如果 t1 为空,直接返回 t2
if t1 == nil {
return t2
}
// 如果 t2 为空,直接返回 t1
if 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
}
617. 合并二叉树 Golang实现的更多相关文章
- LeetCode 617. 合并二叉树(Merge Two Binary Trees)
617. 合并二叉树 617. Merge Two Binary Trees 题目描述 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新 ...
- Java实现 LeetCode 617 合并二叉树(遍历树)
617. 合并二叉树 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点 ...
- 代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树
LeetCode 654.最大二叉树 分析1.0 if(start == end) return节点索引 locateMaxNode(arr,start,end) new root = 最大索引对应节 ...
- Leetcode 617.合并二叉树
合并二叉树 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新 ...
- 【LeetCode】 617. 合并二叉树
题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否 ...
- 每日一题-——LeetCode(617) 合并二叉树
题目描述: 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠.你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值 ...
- [LeetCode]617. 合并二叉树(递归)
###题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新 ...
- LeetCode 617. 合并二叉树 Java
给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 ...
- leadcode的Hot100系列--617. 合并二叉树
合并,就是两个树的结构交集部分,数据相加,否则,取非空部分. 所以,这里相当于是对两棵树同时遍历: 如果两棵树节点都不为空,则数据相加, 否则,直接指针把不为空的节点复制过来. 注:这里没有申请内存, ...
- [LeetCode] 617. Merge Two Binary Trees 合并二叉树
Given two binary trees and imagine that when you put one of them to cover the other, some nodes of t ...
随机推荐
- Ubuntu 设置远程桌面(RDP)
安装桌面环境 如果你的 Ubuntu 还没有安装桌面环境,可以选择以下之一安装: GNOME GNOME 是 Ubuntu Desktop 原生桌面环境. # 安装基本的 GNOME 桌面环境 sud ...
- web静态和动态的区别
一.静态web页面: 1.在静态Web程序中,客户端使用Web浏览器(IE.FireFox等)经过网络(Network)连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务器我现在 ...
- 第1章-JSP 简介
目录 什么是JSP 安装配置JSP运行环境 JSP页面 JSP页面简介 设置Web服务目录 JSP运行原理 JSP 与Java Servlet的关系 HTML与JavaScript 什么是JSP ★ ...
- Unity中的三种渲染路径
Unity中的渲染路径 Unity的渲染路径 在Unity里,渲染路径(Rendering Path)决定了光照是如何应用到Unity Shader中的.因此,我们只有为Shader正确地选择和设置了 ...
- 音视频入门-6-ffmpeg小实验-从v4l2层获取PC ubuntu摄像头图像
0. 进行本代码实验的前提 确保已经在ubuntu内正确安装了ffmpeg 手把手安装教程可以参考我的另一篇博文<音视频入门-4-ffmpeg命令快速体验音视频开发/ ffmpeg编译过程经历的 ...
- Python版Mysql爆破小脚本
本文给大家分享的是使用Python制作的MySQL在线用户密码的暴力破解脚本,非常的好用,有需要的小伙伴可以参考下 Mysql Python版本爆破小脚本,需要安装Python插件MySQL-py ...
- 向量法求 T3 这个若智 r^2
int sqr_vector_dis(node a){ return a.x*a.x+a.y*a.y; } frac vector_multi(node a,node b){ return frac( ...
- OpenAI 发布适用于 .NET 库的稳定版本
OpenAI 在 6 月发布测试版后发布了其官方 .NET 库的稳定版本.它以 NuGet 包的形式提供,支持 GPT-4o 和 GPT-4o mini 等最新模型,以及完整的 OpenAI REST ...
- DOM 操作的常用 API 有哪些 ?
DOM 操作的常用 API 就是DOM 通过API (接口)获取页面(html)元素: 1. 节点查询 API 1.1 document.querySelector() 选择第一个匹配的元素 1.2 ...
- 如何对 Vue 首屏加载实现优化 ?
首屏加载优化是对于 SPA 来说的 ,首次加载所有的 html css js 所需的文件 ,后面就不会因为用户对页面的操作而跳转页面 ,没有跳转页面如何展示不同的内容呢 ? 使用 Vue 的路由机制 ...