LeetCoed617:合并二叉树

2023-05-16

要求

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

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

注意: 合并过程必须从两个树的根节点开始。

在这里插入图片描述

思路

方法一:dfs(深度优先遍历)
从根节点开始同时遍历两个二叉树,并将对应的节点进行合并。

  • 如果两个二叉树的对应节点都为空,则合并后的二叉树的对应节点也为空;
  • 如果两个二叉树的对应节点只有一个为空,则合并后的二叉树的对应节点为其中的非空节点;
  • 如果两个二叉树的对应节点都不为空,则合并后的二叉树的对应节点的值为两个二叉树的对应节点的值之和,此时需要显性合并两个节点。
public class LeetCode617 {
    public TreeNode mergeTrees(TreeNode root1, TreeNode root2) {
        //递归终止条件
        if (root1 == null || root2 == null){
            return root1 == null ? root2 : root1;
        }

        //合并树
        TreeNode node = new TreeNode(root1.val + root2.val);
        node.left = mergeTrees(root1.left,root2.left);
        node.right = mergeTrees(root1.right,root2.right);
        return node;
    }
}

时间复杂度:O(min(m,n)),其中 m 和 n 分别是两个二叉树的节点个数。对两个二叉树同时进行深度优先搜索,只有当两个二叉树中的对应节点都不为空时才会对该节点进行显性合并操作,因此被访问到的节点数不会超过较小的二叉树的节点数。

空间复杂度:O(min(m,n)),其中 m 和 n 分别是两个二叉树的节点个数。空间复杂度取决于递归调用的层数,递归调用的层数不会超过较小的二叉树的最大高度,最坏情况下,二叉树的高度等于节点数。



方法二:迭代(广度优先算法)
广度优先就需要额外的数据结构来辅助了,我们可以借助栈或者队列来完成。
只要两颗树的左节点都不为 null,就把将他们放入队列中;同理只要两棵树的右节点都不为 null 了,也将他们放入队列中。
然后我们不断的从队列中取出节点,把他们相加。
如果出现 树 1 的 left 节点为 null,树 2 的 left 不为 null,直接将树 2 的 left 赋给树 1 就可以了;同理如果树 1 的 right 节点为 null,树 2 的不为 null,将树 2 的 right 节点赋给树 1。

class Solution {
	public TreeNode mergeTrees(TreeNode t1, TreeNode t2) {
	//如果 t1和t2中,只要有一个是null,函数就直接返回
		if(t1==null || t2==null) {
			return t1==null? t2 : t1;
		}
		java.util.LinkedList<TreeNode> queue = new java.util.LinkedList<TreeNode>();
		queue.add(t1);
		queue.add(t2);
		while(queue.size()>0) {
			TreeNode r1 = queue.remove();
			TreeNode r2 = queue.remove();
			r1.val += r2.val;
			//如果r1和r2的左子树都不为空,就放到队列中
			//如果r1的左子树为空,就把r2的左子树挂到r1的左子树上
			if(r1.left!=null && r2.left!=null){
				queue.add(r1.left);
				queue.add(r2.left);
			}
			else if(r1.left==null) {
				r1.left = r2.left;
			}
			//对于右子树也是一样的
			if(r1.right!=null && r2.right!=null) {
				queue.add(r1.right);
				queue.add(r2.right);
			}
			else if(r1.right==null) {
				r1.right = r2.right;
			}
		}
		return t1;
	}
}

时间复杂度:O(N)
空间复杂度:O(N),对于满二叉树时,要保存所有的叶子节点,即 N/2 个节点。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

LeetCoed617:合并二叉树 的相关文章

  • 51单片机的系统扩展之8255A

    8255 xff1a 8255芯片是Intel公司生产的可编程并行I O接口芯片 xff0c 有3个8位并行I O口 具有3个通道3种工作方式的可编程并行接口芯片 xff08 40引脚 xff09 其各口功能可由软件选择 xff0c 使用灵
  • ESP8266一直闪蓝灯,不停复位的解决办法

    问题 xff1a 在一次下载中无意间将下载的文件选错 xff0c 再次下载完成后就突然一直闪蓝灯 xff0c 不停复位 这并不是ESP8266模组坏了 解决办法 xff1a 1 我们平常下载程序选择eagle flash bin和eagle
  • Markdown快速入门

    Markdown快速入门 1 代码块 96 96 96 c include lt iostream gt using namespace std int main cout lt lt 34 hello world 34 lt lt end
  • VSCode 如何让去掉 Pylint 展示的花里胡哨的警告

    Pylint 是一个 python 的语法检测器 xff0c 提升编程效率的同时其带来的花里胡哨的警告也是真让人看着难受 xff0c 就像下面这花花绿绿的波浪线 xff1a 这些警告种类极其丰富 xff0c 比如下面这样 xff1a Met
  • 01_HC-SR04超声波传感器(GPIO中断+定时器方式)

    1 简介 xff1a HC SR04 超声波测距模块可提供 2cm 400cm 的非接触式距离感测功能 xff0c 测 距精度可达高 3mm xff1b 模块包括超声波发射器 接收器与控制电路 2 工作原理 xff1a 1 采用 IO 口
  • Faster R-CNN论文解读

    文章目录 AbstractIntroduction缘由RPN训练方案 Faster R CNN整体流程Conv layersRPNclsreganchorTranslation Invariant AnchorsMuti Scale Anc
  • c语言输入字符时控制符%c前加空格的原因解释

    文章目录 一 前景知识1 缓冲区2 标准输入流 二 scanf语句的执行1 scanf对于整形 d的输入2 scanf对于字符 c的输入 在编一个代码时偶然间发现一个知识盲点 用scanf语句输入字符时需要在控制符 c前加空格 在解释相关这
  • 解决c++中头文件重复包含的问题

    前言 c 43 43 项目中经常会使用到自己定义的一些函数和接口 xff0c 我们通常在头文件中包含进来 xff0c 但这样存在头文件被多次包含的危险 xff0c 导致编译报错 xff0c 以下介绍了几种常用的解决方法 一 采用宏定义的方法
  • 华为交换机5700 SSH配置

    一 在本地设备服务端生成密匙 Huawei rsa local span class token operator span span class token keyword key span span class token operat
  • 函数模板、类模板

    泛型编程 泛型编程 xff1a 编写与类型无关的通用代码 xff0c 是代码复用的一种手段 模板是泛型编程的基础 函数模板 函数模板代表了一个函数家族 xff0c 该函数模板与类型无关 xff0c 在使用时被参数化 xff0c 根据实参类型
  • STM32 第4讲 STM32原理图

    本文为学习正点原子得笔记 xff0c 主要讲解STM32原理图绘制 xff0c 主要由最小系统 43 IO口分布两步完成 引脚分布 STM引脚分类 xff1a 电源引脚晶振引脚复位引脚下载引脚 xff1a JTAG SWD 串口 JTAG
  • STM32 第12讲 GPIO:结构/8种工作模式/寄存器/驱动模型/配置步骤/实验

    文章目录 GPIO简介GPIO特点电气特性GPIO引脚分布 GPIO8种工作模式GPIO的基本结构8种工作模式 GPIO寄存器GPIO端口模式寄存器 xff08 GPIOx MODER xff09 GPIO端口输出类型寄存器 xff08 G
  • PID/LQR/MPC自行总结使用

    PID LQR MPC自行总结使用 自学控制相关知识 xff0c 已经一年多了 xff0c 现在回头看看还是有很多模糊不明确的地方 xff0c 准备借此机会进行总结一下 xff0c 第一次写博客 xff0c 如果错误和不合理之处 xff0c
  • 对 torch.nn.Linear 的理解

    torch nn Linear 是 pytorch 的线性变换层 xff0c 定义如下 xff1a Linear in features int out features int bias bool 61 True device Any N
  • rosdep init 错误解决终极方法(药到病除)

    rosdep init 错误解决方法 一 安装ROS执行以下指令时报错二 原因三 解决办法1 查询IP地址2 将IP地址添加进文件3 重新执行指令 成功解决 xff01 xff01 xff01 一 安装ROS执行以下指令时报错 sudo r
  • Intel Realsense T265 在ubuntu下的环境配置

    Intel Realsense T265 在ubuntu下的环境配置 一 T265介绍二 realsense SDK 安装配置1 注册服务器的公钥2 将服务器添加到存储库列表3 安装所需的库 xff0c 开发者和调试包5 插上T265打开
  • SLAM图优化一

    前言 SLAM问题的处理方法主要分为滤波和图优化两类 滤波的方法中常见的是扩展卡尔曼滤波 粒子滤波 信息滤波等 xff0c 熟悉滤波思想的同学应该容易知道这类SLAM问题是递增的 实时的处理数据并矫正机器人位姿 比如基于粒子滤波的SLAM的
  • 编程实现MapReduce操作

    文章目录 一 MapReduce的WordCount应用二 Partitioner 操作三 xff0e 排序实现四 xff0e 二次排序实现五 hadoop实现六 出现的问题与解决方案 提示 xff1a 以下是本篇文章正文内容 xff0c
  • React项目中TS报错解决方案

    Umi amp amp React amp amp Vue3 amp amp TS报错解决方案总结 个人向 Redux开发工具报错window下没有某属性 解决方案 项目根目录创建global d ts文件 span class token
  • Nvidia NX 运行vins-fusion + DenseSurfelMapping

    Nvidia NX 运行vins fusion 43 DenseSurfelMapping 实现姿态估计和稠密建图 xff0c 记录自用 参考博客 xff1a 使用Realsense D435i运行VINS Fusion并建图 从零开始使用

随机推荐

  • UR5机械臂与realsense相机在Gazebo仿真环境下的手眼标定(眼在手上)

    简介 这是一个Gazebo仿真环境下利用UR5机械臂和realsense相机进行手眼标定的教程 xff08 眼在手上 xff09 准备相关文件 span class token constant UR5 span git clone htt
  • 六,WiFi天猫精灵零配详解

    1 xff0c IOT设备配网方法 smartconfig手机热点配网设备热点配网路由器热点配网扫描二维码配网 2 xff0c 什么是零配 概念 xff1a 让已连网的设备告诉未配网的设备路由器的SSID和密码 xff08 天猫精灵语音寻找
  • 蓝牙Mesh

    1 蓝牙mesh介绍 蓝牙Mesh网络模型 xff1a 蓝牙Mesh提高灵活度 xff1a 代理节点 xff08 Proxy xff09 低功耗节点 xff08 Low Power xff09 转发节点 xff08 Relay xff09
  • 实践:设计SLAM系统

    实现一个双目视觉里程计在Kitti数据集中的运行效果 很有必要多看几遍的例程 这个视觉里程计由一个光流追踪的前端和一个局部BA的后端组成 双目只需单帧就可初始化 xff0c 双目存在3D观测 xff0c 实现效果比单目好 程序 xff1a
  • Pytorch 中 Embedding 类详解

    在 NLP 领域 xff0c 可以使用 Pytorch 的 torch nn Embeding 类对数据进行词嵌入预处理 关于词嵌入的解释这里就不做解释咯 xff0c 不明白的阔以先出门左拐找百度 重点说下这个 Embeding 类怎么用的
  • 工业相机测距开发(2):实战篇

    前言 本文将不再涉及原理部分 xff0c 想要了解基础知识的话 xff0c 请看上一篇的文章 xff0c 我们使用的是opencv的里面的函数 xff0c 这里面也是重点看这个函数们 xff0c 我们通过这个函数来得到外参 xff0c 在通
  • LeetCode406:根据身高重建队列

    要求 假设有打乱顺序的一群人站成一个队列 xff0c 数组 people 表示队列中一些人的属性 xff08 不一定按顺序 xff09 每个 people i 61 hi ki 表示第 i 个人的身高为 hi xff0c 前面 正好 有 k
  • LeetCode416:分割等和子集

    要求 给你一个 只包含正整数 的 非空 数组 nums 请你判断是否可以将这个数组分割成两个子集 xff0c 使得两个子集的元素和相等 思路 做一个等价转换 xff1a 是否可以从输入数组中挑选出一些正整数 xff0c 使得这些数的和 等于
  • LeetCode437:路径总和III

    要求 给定一个二叉树的根节点 root xff0c 和一个整数 targetSum xff0c 求该二叉树里节点值之和等于 targetSum 的 路径 的数目 路径 不需要从根节点开始 xff0c 也不需要在叶子节点结束 xff0c 但是
  • LeetCode438:找到字符串中所有字母异位词

    要求 给定两个字符串 s 和 p xff0c 找到 s 中所有 p 的 异位词 的子串 xff0c 返回这些子串的起始索引 不考虑答案输出的顺序 异位词 指由相同字母重排列形成的字符串 xff08 包括相同的字符串 xff09 思路 方法一
  • LeetCode448:找到所有数组中消失的数字

    要求 给你一个含 n 个整数的数组 nums xff0c 其中 nums i 在区间 1 n 内 请你找出所有在 1 n 范围内但没有出现在 nums 中的数字 xff0c 并以数组的形式返回结果 思路 可以把数组中的元素与索引建立一一对应
  • LeetCode461:汉明距离

    要求 两个整数之间的 汉明距离 指的是这两个数字对应二进制位不同的位置的数目 给你两个整数 x 和 y xff0c 计算并返回它们之间的汉明距离 思路 方法一 xff1a 使用内置位计数功能 大多数编程语言都内置了计算二进制表达中 1 的数
  • LeetCode494:目标和

    要求 给你一个整数数组 nums 和一个整数 target 向数组中的每个整数前添加 43 或 xff0c 然后串联起所有整数 xff0c 可以构造一个 表达式 xff1a 例如 xff0c nums 61 2 1 xff0c 可以在 2
  • Java中Integer.parseInt()方法最全解析

    介绍 是Integer类中提供的一个静态方法 用于将传入的string类型字符串根据要求转为相应进制的int值 如果没有要求进制则按10进制计算 xff0c 属于java lang包的 xff1b 使用讲解 1 parseInt Strin
  • LeetCode538:把二叉搜索树转换为累加树

    要求 给出二叉 搜索 树的根节点 xff0c 该树的节点值各不相同 xff0c 请你将其转换为累加树 xff08 Greater Sum Tree xff09 xff0c 使每个节点 node 的新值等于原树中大于或等于 node val
  • python 最小堆类型: heapq

    目录 1 heapq 的常用方法 2 几个例子 a 最小堆的创建以及增删 b 如何使用 heapq 创建最大堆 c 获取第 k 大 第 k 小数据 d 列表中的元素是元组 heapq 是 python 的一个库 xff0c 用一个列表来维护
  • LeetCode543:二叉树的直径

    要求 给定一棵二叉树 xff0c 你需要计算它的直径长度 一棵二叉树的直径长度是任意两个结点路径长度中的最大值 这条路径可能穿过也可能不穿过根结点 题目解析 这里返回的是 xff1a 两结点之间的路径长度是以它们之间边的数目表示 最大的直径
  • LeetCode560:和为K的子数组

    要求 给你一个整数数组 nums 和一个整数 k xff0c 请你统计并返回 该数组中和为 k 的连续子数组的个数 思路 方法一 xff1a 暴力解 先固定左边界 xff0c 再去枚举右边 span class token keyword
  • LeetCode581:最短无序连续子数组

    要求 给你一个整数数组 nums xff0c 你需要找出一个 连续子数组 xff0c 如果对这个子数组进行升序排序 xff0c 那么整个数组都会变为升序排序 请你找出符合题意的 最短 子数组 xff0c 并输出它的长度 思路 我们可以假设把
  • LeetCoed617:合并二叉树

    要求 给你两棵二叉树 xff1a root1 和 root2 想象一下 xff0c 当你将其中一棵覆盖到另一棵之上时 xff0c 两棵树上的一些节点将会重叠 xff08 而另一些不会 xff09 你需要将这两棵树合并成一棵新二叉树 合并的规