算法力扣刷题记录 五十二【617.合并二叉树】

前言

二叉树篇,继续。
记录 五十二【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] 内
-10^4 <= Node.val <= 10^4

二、尝试实现

思路

  1. 本题需要同时操作两个树,那么学过记录 四十二【101. 对称二叉树】 的方法是同时操作两个树。所以同样的思路,解决这道题。
  2. 通过递归实现,开始分步完成递归函数。
  3. 确定递归的参数:因为同时操作两个树,所以两个参数TreeNode* root1和TreeNode* root2。
  4. 确定递归返回值:返回合并之后的子树。所以返回值类型TreeNode* 。
  5. 确定终止条件:
  • root1和root2都是空,返回空节点;
  • root1或root2只有一个为空,返回不为空的节点;
  • root1和root2都不是空,进入递归处理逻辑。
  1. 递归逻辑:本题也相当于构造一个新的二叉树——记录 五十一【654.最大二叉树】中学习到使用前序遍历
  • 先创建中间节点。值为root1->val+root2->val。
  • 递归左子树;
  • 递归右子树。

代码实现

/*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
class Solution {
public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {//终止条件if(!root1 && !root2) return nullptr;if(!root1 && root2) return root2;if(root1 && !root2) return root1;//两个同时存在时,处理顺序前序:中左右TreeNode* root = new TreeNode(root1->val+root2->val);root->left = mergeTrees(root1->left,root2->left);root->right = mergeTrees(root1->right,root2->right);return root;}
};

三、参考学习

参考学习链接

学习内容

  1. 递归法:思路和二、中的思路一致,但是代码处理上的区别如下:
  • 终止条件:
    • 参考给的终止条件,同时为空的逻辑在这两行中可以涵盖。
      if (t1 == NULL) return t2; // 如果t1为空,合并之后就应该是t2
      if (t2 == NULL) return t1; // 如果t2为空,合并之后就应该是t1
      
    • 二、中代码实现的终止条件分成3类。
  • 新定义树?或重复利用某一个树?
    • 参考在合并时,重复利用root1这个树,在这个树上合并操作。没有新定义;
    • 在二、中代码实现中,新定义树节点;
    • 自然可以重复利用root2这个树:root2->val += root1->val;
  • 遍历顺序:根据学习经验,方便理解可以确定前序遍历好理解。但是重复利用某个树的时候,前中后遍历顺序都可以
  1. 迭代法:同样需要同时处理两个树。那么处理的两个对象需要同时放到容器中,类似记录 四十二【101. 对称二叉树】中迭代实现。

  2. 迭代代码实现:

    /*** Definition for a binary tree node.* struct TreeNode {*     int val;*     TreeNode *left;*     TreeNode *right;*     TreeNode() : val(0), left(nullptr), right(nullptr) {}*     TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}*     TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}* };*/
    class Solution {
    public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {queue<TreeNode*> q;if(!root1) return root2;if(!root2) return root1;q.push(root1);q.push(root2);while(!q.empty()){TreeNode* node1 = q.front();q.pop();TreeNode* node2 = q.front();q.pop();//复用root1node1->val += node2->val;if(node1->left && node2->left){q.push(node1->left);q.push(node2->left);}if(node1->right &&node2->right){q.push(node1->right);q.push(node2->right);}//复用树1,所以用树1的左右判断是否为空。if(!node1->left){node1->left = node2->left;}if(!node1->right){node1->right = node2->right;}}return root1;}
    };
    

总结

【617.合并二叉树】用到的知识点学习过,能够想到并应用即可。
学习记录:

  1. 同时操作两个树:记录 四十二【101. 对称二叉树、100.相同的树、572.另一个树的子树】
  2. 构造二叉树:记录 五十一【654.最大二叉树】

(欢迎指正,转载标明出处)

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

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

相关文章

19-2 LLM之野望 2 - LLM给到Quora面临的困境

Quora 有一个简单的前提&#xff1a;它是一个分享知识和专业知识的地方&#xff0c;好奇的人可以就任何可以想象到的话题提出问题&#xff0c;并从平台博学的社区获得深思熟虑的、见识广博的答案。 想想雅虎答案 (Yahoo Answers)&#xff0c;它适用于技术员工和格拉德威尔式的…

农业旅游与乡村旅游:融合绿色田野与诗意远方的经济新篇章

在这个快节奏的时代&#xff0c;人们对于回归自然、体验淳朴生活的渴望日益增强。农业旅游与乡村旅游&#xff0c;作为新兴的旅游形态&#xff0c;正逐步成为连接城市与乡村的桥梁&#xff0c;不仅为都市人提供了一片心灵的栖息地&#xff0c;也为农村地区带来了前所未有的发展…

Python3.4.4 32位

Python 3.4.4是Python编程语言的一个稳定版本&#xff0c;发布于2015年&#xff0c;主要针对32位操作系统设计。对于那些仍然运行Windows XP的用户来说&#xff0c;这是他们可以安装的最高版本的Python&#xff0c;因为从Python 3.5开始&#xff0c;官方停止了对Windows XP的支…

Apache BookKeeper 一致性协议解析

导语 Apache Pulsar 是一个多租户、高性能的服务间消息传输解决方案&#xff0c;支持多租户、低延时、读写分离、跨地域复制&#xff08;GEO replication&#xff09;、快速扩容、灵活容错等特性。Pulsar 存储层依托于 BookKeeper 组件&#xff0c;所以本文简单探讨一下 BookK…

Six common classification algorithms in machine learning

分类算法是一种机器学习算法&#xff0c;其主要目的是从数据中发现规律并将数据分成不同的类别。分类算法通过对已知类别训练集的计算和分析&#xff0c;从中发现类别规则并预测新数据的类别。常见的分类算法包括决策树、朴素贝叶斯、逻辑回归、K-最近邻、支持向量机等。分类算…

DDei在线设计器-HTML渲染

Html渲染 HtmlViewer插件通过将一个外部DIV附着在图形控件上&#xff0c;从而改变原有图形的显示方式。允许使用者自己定义HTML通过HTML元素。本示例演示了通过Html来扩展渲染图形&#xff0c;从而获得更加丰富的图形展现。 通常情况下&#xff0c;我们创建的图形控件&#xff…

springboot的简单应用

Mvc与三层架构 创建Spring项目 勾选web和mabais框架 配置yml文件&#xff0c;这里创建spring项目默认生成的是propertise文件&#xff0c;但是properties文件的格式看起来没有yml文件一目了然。yml文件配置数据库还有映射mapper层的xml文件以及设置日志级别&#xff0c;比如map…

去中心化技术的变革力量:探索Web3的潜力

随着区块链技术的发展和应用&#xff0c;去中心化技术正成为数字世界中的一股强大变革力量。Web3作为去中心化应用的新兴范式&#xff0c;正在重新定义人们对于数据、互联网和价值交换的认知。本文将探索去中心化技术的基本概念、Web3的核心特征及其潜力应用&#xff0c;展示其…

WebRTC音视频-环境搭建

目录 期望效果 1:虚拟机和系统安装 2:WebRTC客户端环境搭建 2.1&#xff1a;VScode安装 2.2&#xff1a;MobaXterm安装 3:WebRTC服务器环境搭建 3.1&#xff1a;安装openssh服务器 3.2&#xff1a;安装Node.js 3.3&#xff1a;coturn穿透和转发服务器 3.3.1&a…

Docker 镜像使用和安装

​ 1、简介 Docker是一个开源的应用容器引擎&#xff1b;是一个轻量级容器技术&#xff1b; Docker支持将软件编译成一个镜像&#xff1b;然后在镜像中各种软件做好配置&#xff0c;将镜像发布出去&#xff0c;其他使用者可以直接使用这个镜像&#xff1b; 运行中的这个镜像…

vue2 使用代码编辑器插件 vue-codemirror

vue 使用代码编辑器插件 vue-codemirror 之前用过一次&#xff0c;当时用的一知半解的&#xff0c;所以也没有成文&#xff0c;前几天又因为项目有需求&#xff0c;所以说有用了一次&#xff0c;当然&#xff0c;依旧是一知半解&#xff0c;但是还是稍微写一下子吧&#xff01;…

双非一本嵌入式方向怎么学?

双非一本&#xff08;非“985”和“211”工程重点建设的本科院校&#xff09;的学生在学习嵌入式方向时&#xff0c;可以通过以下步骤和策略来系统地学习和提升自己。我收集归类了一份嵌入式学习包&#xff0c;对于新手而言简直不要太棒&#xff0c;里面包括了新手各个时期的学…

【学习笔记】无人机系统(UAS)的连接、识别和跟踪(二)-定义和缩写

引言 3GPP TS 23.256 技术规范&#xff0c;主要定义了3GPP系统对无人机&#xff08;UAV&#xff09;的连接性、身份识别、跟踪及A2X&#xff08;Aircraft-to-Everything&#xff09;服务的支持。 3GPP TS 23.256 技术规范&#xff1a; 【免费】3GPPTS23.256技术报告-无人机系…

前端JS特效第46集:js-实现响应式节庆活动砸金蛋效果

js-实现响应式节庆活动砸金蛋效果&#xff0c;先来看看效果&#xff1a; 部分核心的代码如下(全部代码在文章末尾)&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>响应式节庆活动砸金蛋…

Diffusion【1】:SDSeg——基于Stable Diffusion的单步扩散分割!

文章目录 前言AbstractIntroductionMethodsLatent EstimationConcatenate Latent FusionTrainable Vision Encoder ExperimentDatasets and Evaluation MetricsImplementation DetailsExperimental SettingsInference Stage Main ResultsComparison with State-of-the-ArtsComp…

组队学习——支持向量机

本次学习支持向量机部分数据如下所示 IDmasswidthheightcolor_scorefruit_namekind 其中ID&#xff1a;1-59是对应训练集和验证集的数据&#xff0c;60-67是对应测试集的数据&#xff0c;其中水果类别一共有四类包括apple、lemon、orange、mandarin。要求根据1-59的数据集的自…

在RK3568上如何烧录MAC?

这里我们用RKDevInfoWriteTool 1.1.4版本 下载地址&#xff1a;https://pan.baidu.com/s/1Y5uNhkyn7D_CjdT98GrlWA?pwdhm30 提 取 码&#xff1a;hm30 烧录过程&#xff1a; 1. 解压RKDevInfoWriteTool_Setup_V1.4_210527.7z 进入解压目录&#xff0c;双击运行RKDevInfo…

24暑假算法刷题 | Day16 | LeetCode 513. 找树左下角的值,112. 路径总合,106. 从中序和后序遍历序列构造二叉树

目录 513. 找树左下角的值题目描述题解 112. 路径总合题目描述题解 106. 从中序和后序遍历序列构造二叉树题目描述题解 513. 找树左下角的值 点此跳转题目链接 题目描述 给定一个二叉树的 根节点 root&#xff0c;请找出该二叉树的 最底层 最左边 节点的值。 假设二叉树中至…

虚继承(C++)

目录 菱形继承 虚继承 虚继承原理 虚继承使用注意事项&#xff1a; 不要把所有的遗憾都留给未来&#xff0c;趁年轻出去走走&#xff0c; 让我们用心去感受这个世界&#xff0c;用脚步去丈量这个世界的距离。 这里是来自M--Y的专栏&#xff1a;C启&#xff08;&#xff09;航…

SAP ABAP 批导函数(封装版)

EXCEL批导函数相信大家熟悉的不能再熟悉了&#xff0c;但是特殊场景不同函数对工作的影响真的很大。 整理本篇文章是因为公司电脑统一使用了加密系统&#xff0c;通过先前的统一函数无法直接上传&#xff0c;每次都要先另存为TEXT文本后上传&#xff0c;用户体验非常差&#x…