题目描述:

给你两棵二叉树: 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实现的更多相关文章

  1. LeetCode 617. 合并二叉树(Merge Two Binary Trees)

    617. 合并二叉树 617. Merge Two Binary Trees 题目描述 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新 ...

  2. Java实现 LeetCode 617 合并二叉树(遍历树)

    617. 合并二叉树 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点 ...

  3. 代码随想录算法训练营day20 | leetcode ● 654.最大二叉树 ● 617.合并二叉树 ● 700.二叉搜索树中的搜索 ● 98.验证二叉搜索树

    LeetCode 654.最大二叉树 分析1.0 if(start == end) return节点索引 locateMaxNode(arr,start,end) new root = 最大索引对应节 ...

  4. Leetcode 617.合并二叉树

    合并二叉树 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新 ...

  5. 【LeetCode】 617. 合并二叉树

    题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否 ...

  6. 每日一题-——LeetCode(617) 合并二叉树

    题目描述: 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠.你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值 ...

  7. [LeetCode]617. 合并二叉树(递归)

    ###题目 给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新 ...

  8. LeetCode 617. 合并二叉树 Java

    给定两个二叉树,想象当你将它们中的一个覆盖到另一个上时,两个二叉树的一些节点便会重叠. 你需要将他们合并为一个新的二叉树.合并的规则是如果两个节点重叠,那么将他们的值相加作为节点合并后的新值,否则不为 ...

  9. leadcode的Hot100系列--617. 合并二叉树

    合并,就是两个树的结构交集部分,数据相加,否则,取非空部分. 所以,这里相当于是对两棵树同时遍历: 如果两棵树节点都不为空,则数据相加, 否则,直接指针把不为空的节点复制过来. 注:这里没有申请内存, ...

  10. [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 ...

随机推荐

  1. 阿里云 CLI 使用

    安装 macOS: brew install aliyun-cli Linux: wget https://aliyuncli.alicdn.com/aliyun-cli-linux-latest-a ...

  2. SSH 免密登录 Windows

    安装并启动 OpenSSH 服务器 在开始之前请确保你的远程 Windows 已经安装了 OpenSSH 服务器.若没有安装,请在 设置 > 系统 > 可选功能 > 添加可选功能 中 ...

  3. 【Jmeter】之进行单接口批量压力测试

    目录: 一.安装Jmeter 二.接口压力测试 p.p1 { margin: 0; font: 14px ".PingFang SC"; color: rgba(17, 31, 4 ...

  4. pikachu靶场 越权(水平越权+垂直越权)

    水平越权 A用户和B用户属于同一级别用户,但各自不能操作对方个人信息.A用户如果越权操作B用户个人信息的情况称为水行越权操作 三个用户 lucy/lili/kobe  密码都为123456 随便登录其 ...

  5. 【YashanDB知识库】数据库审计shutdown immediate操作导致数据库异常退出

    [问题分类]功能使用 [关键字]数据库审计,shutdown immediate [问题描述]审计shutdown immediate 操作,数据库作主从切换时会导致数据库异常退出. [问题原因分析] ...

  6. Java 1.8 Stream流原理与用法总结

    一.接口设计 从Java1.8开始提出了Stream流的概念,侧重对于源数据计算能力的封装,并且支持序列与并行两种操作方式:依旧先看核心接口的设计: BaseStream:基础接口,声明了流管理的核心 ...

  7. SpringBoot——更换Tomcat服务器为 Jetty 服务器

    Jetty服务器(可能会用到) Jetty 比 Tomcat更轻量级,可拓展性更强(相较于Tomcat),谷歌应用引擎(GAE)已经全面切换为Jetty 首先要启动Jetty服务器  -->  ...

  8. 系统编程-操作系统概论PART2

    <1> 操作系统提供的服务   <2> 现代操作系统的特征 2.1 微内核(英文中常译作µ-kernel或者micro kernel) 这是一种能够提供必要服务的操作系统内核: ...

  9. [OI] 容斥原理拓展

    10.容斥原理拓展 10.1 二项式反演 \[P.10.1(1) \] 设 \(U=\{S_1,S_2,S_3...S_n\}\),且任意 \(i\) 个元素的交集都相等 定义 \(g(x)\) 为 ...

  10. 前端VUE调用后台接口,实现基本增删改查

    设置接口请求 作为一个后台,个人一点感想:前端现在都是组件化开发,会看文档基本功能就能实现. js文件 import request from '@/router/axios' // 查询 expor ...