179.二叉树:合并二叉树(力扣)

代码解决

/*** 二叉树节点的定义。* 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) {// 若root1为空,则返回root2if(root1 == nullptr) return root2;// 若root2为空,则返回root1if(root2 == nullptr) return root1;// 创建队列以存储两棵树的节点queue<TreeNode*> que;// 将两棵树的根节点入队que.push(root1);que.push(root2);// 逐层遍历树while(!que.empty()) {// 弹出队首的节点TreeNode* node1 = que.front();que.pop();TreeNode* node2 = que.front();que.pop();// 将对应节点的值相加node1->val += node2->val;// 若两节点都有左子节点if(node1->left != nullptr && node2->left != nullptr) {// 将左子节点入队que.push(node1->left);que.push(node2->left);}// 若两节点都有右子节点if(node1->right != nullptr && node2->right != nullptr) {// 将右子节点入队que.push(node1->right);que.push(node2->right);}// 若node1无左子节点但node2有,则将node2的左子节点赋给node1if(node1->left == nullptr && node2->left != nullptr) {node1->left = node2->left;}// 若node1无右子节点但node2有,则将node2的右子节点赋给node1if(node1->right == nullptr && node2->right != nullptr) {node1->right = node2->right;}} // 返回合并后的树(root1)return root1;}
};
  1. 首先判断两棵树的根节点是否都为空,如果其中一棵为空,则返回另一棵。
  2. 初始化一个队列 que 用来存储两棵树的节点。
  3. 将两棵树的根节点加入队列。
  4. 当队列不为空时,进行遍历:
    • 从队列中取出两个节点,分别代表两棵树中的对应节点。
    • 将这两个节点的值相加。
    • 如果这两个节点都有左子节点,将左子节点加入队列。
    • 如果这两个节点都有右子节点,将右子节点加入队列。
    • 如果第一个节点有左子节点而第二个节点没有,将第一个节点的左子节点赋给第一个节点。
    • 如果第一个节点有右子节点而第二个节点没有,将第一个节点的右子节点赋给第一个节点。
  5. 遍历结束后,返回第一棵树的根节点。

递归 

/*** 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) {// 如果root1为空,则返回root2if(root1==nullptr) return root2;// 如果root2为空,则返回root1if(root2==nullptr) return root1;// 创建一个新节点,值为两个根节点值的和TreeNode* node=new TreeNode(0);node->val=root1->val+root2->val;// 递归合并左子树node->left=mergeTrees(root1->left,root2->left);// 递归合并右子树node->right=mergeTrees(root1->right,root2->right);// 返回合并后的根节点return node;}
};
  1. 首先判断两棵树的根节点是否为空,如果其中一个为空,则返回另一个。
  2. 创建一个新的树节点 node,其值为两棵原树的根节点值之和。
  3. 递归地合并两棵原树的左子树,并将合并后的节点作为新节点的左子节点。
  4. 递归地合并两棵原树的右子树,并将合并后的节点作为新节点的右子节点。
  5. 返回合并后的根节点。

这个算法的时间复杂度是 O(n),因为每个节点都会被访问一次,其中 n 是两棵树中节点数量的总和。空间复杂度也是 O(n),因为需要存储递归调用的栈。

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

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

相关文章

jQuery如何判断一个dom元素的display属性是不是block

在jQuery中&#xff0c;你可以使用.css() 方法来获取一个DOM元素的CSS属性&#xff0c;包括display属性。然后&#xff0c;你可以检查这个属性的值是否等于"block"。 以下是一个简单的示例&#xff0c;展示了如何使用jQuery来判断一个DOM元素的display属性是否为&qu…

opencv 通过滑动条调整阈值处理、边缘检测、轮廓检测、模糊、色调调整和对比度增强参数 并实时预览效果

使用PySimpleGUI库创建了一个图形用户界面(GUI),用于实时处理来自OpenCV摄像头的图像。它允许用户应用不同的图像处理效果,如阈值处理、边缘检测、轮廓检测、模糊、色调调整和对比度增强。用户可以通过滑动条调整相关参数。 完整代码在文章最后,可以运行已经测试; 代码的…

第3章 Unity 3D着色器系统

3.1 从一个外观着色器程序谈起 新建名为basic_diffuse.shader的文件&#xff0c;被一个名为basic_diffuse.mat的材质文件所引用&#xff0c;而basic_diffuse.mat文件则被场景中名为Sphere的game object的MeshRenderer组件所使用。 basic_diffuse.shader代码文件的内容如下所示…

软设之敏捷方法

敏捷方法的总体目标是通过尽可能早地&#xff0c;持续地对有价值的软黏的交付&#xff0c;使客户满意 适用于&#xff1a;小步快跑的思想&#xff0c;适合小项目小团队 极限编程XP 4大价值观&#xff1a; 沟通 简单 反馈 勇气 5大原则 快速反馈 简单性假设 逐步修改…

【GIS】全球范围气象站点的逐年平均气温数据(1929-2023年)

数据简介&#xff1a;气象数据包括气象站点温度、湿度、光照等等。提供自1929-2023年以来的全球逐年平均气温数据气象数据下载。数据源为NCDC&#xff08;美国国家气候数据中心&#xff0c;National Climatic Data Center&#xff09;&#xff0c;隶属于NOAA&#xff08;美国国…

探索JavaScript逆向工程与风控等级

探索JavaScript逆向工程与风控等级 在当今的网络安全领域&#xff0c;JavaScript逆向工程&#xff08;简称JS逆向&#xff09;已成为许多开发者和安全专家关注的焦点。JS逆向主要涉及对JavaScript代码的分析与理解&#xff0c;以发现其内部逻辑、数据流及潜在漏洞。这种技术常用…

大型语言模型(LLMs)的后门攻击和防御技术

大型语言模型&#xff08;LLMs&#xff09;通过训练在大量文本语料库上&#xff0c;展示了在多种自然语言处理&#xff08;NLP&#xff09;应用中取得最先进性能的能力。与基础语言模型相比&#xff0c;LLMs在少样本学习和零样本学习场景中取得了显著的性能提升&#xff0c;这得…

SCI二区|鲸鱼优化算法(WOA)原理及实现【附完整Matlab代码】

目录 1.背景2.算法原理2.1算法思想 3.结果展示4.参考文献5.代码获取 1.背景 2016年&#xff0c;S Mirjalili受到自然界座头鲸社会行为启发&#xff0c;提出了鲸鱼优化算法&#xff08;Whale Optimization Algorithm, WOA&#xff09;。 2.算法原理 WOA模拟了座头鲸的社会行为…

47-3 等保测评报告编写

等级测评报告 (仅供参考) 报告编号:xxxxxxxxxxx(系统备案表编号)-xxxxx(年份)-xxxx(机构代码)-xx(测评次数) 2021 版 网络安全等级保护 [被测对象名称] 等级测评报告 被测单位: ______测评单位: ______报告时间: __年__月__ 网络安全等级测评基本信息表 被测对象被测…

桌面应用开发框架比较:Electron、Flutter、Tauri、React Native 与 Qt

在当今快速发展的技术环境中&#xff0c;对跨平台桌面应用程序的需求正在不断激增。 开发人员面临着选择正确框架之挑战&#xff0c;以便可以高效构建可在 Windows、macOS 和 Linux 上无缝运行的应用程序。 在本文中&#xff0c;我们将比较五种流行的桌面应用程序开发框架&…

Excel中如何用公式列出包含特定文本的所有单元格?

如下图&#xff0c;希望用公式得到“以分布式开始”的G列数据。 一、高版本公式 FILTER(E2:E9,LEFT(E2:E9,3)"分布式") 用LEFT函数提取数据的左侧3个字符&#xff0c;是“分布式”的就是以它开始的数据了&#xff0c;用FILTER函数筛选出来即可。 二、低版本公式 如…

Nginx+KeepAlived高可用负载均衡集群的部署

目录 一.KeepAlived补充知识 1.一个合格的群集应该具备的特点 2.健康检查&#xff08;探针&#xff09;常用的工作方式 3.相关面试问题 问题1 问题2 二.Keepealived脑裂现象 1.现象 2.原因 硬件原因 运用配置原因 3.解决 4.预防 方法1 方法2 方法3 方法4 三.…

【菜狗学前端】 初探TS(结合在vue3中的使用)

TypeScript是拥有类型的JavaScript超集&#xff0c;它可以编译成普通、干净、完整的JavaScript代码。我们可以将TypeScript理解成加强版的JavaScript。 简单来说:Ts是带类型语法的Js; Ts是Js的超集 TS官方网站&#xff1a;https://www.typescriptlang.org/ TS中文官网&#xf…

CXL协议中 Register Locator DVSEC详解

✨ 前言&#xff1a; Register Locator DVSEC&#xff08;Designated Vendor-Specific Extended Capability&#xff09;是一种PCI Express&#xff08;PCIe&#xff09;配置空间的能力&#xff0c;专为CXL&#xff08;Compute Express Link&#xff09;技术中的设备设计。这包…

软考初级网络管理员_09_网络单选题

1.下列Internet应用中对实时性要求最高的是()。 电子邮件 Web浏览 FTP文件传输 IP电话 2.在Internet中的大多数服务(如WWW、FTP等)都采用()模型。 星型 主机/终端 客户机/服务器 网状 3.子网掩码的作用是()。 可以用来寻找网关 可以区分IP和MAC 可以识别子网 可以…

[DDR5 Jedec] 读操作 Read Command 精讲

依公知及经验整理&#xff0c;原创保护&#xff0c;禁止转载。 专栏 《深入理解DDR》 Read 读取命令也可以视为列读取命令。当与正确的bank地址和列地址结合使用时&#xff0c;通过激活命令&#xff08;行访问&#xff09;移动到检测放大器中的数据&#xff0c; 现在被推送到数…

python 基础--数据类型、基本数据类型之间的相互转换

文章目录 一、python 数据类型介绍二、基本数据类型2.1 Numbers&#xff08;数字类型&#xff09;2.2 String&#xff08;字符串类型&#xff09;2.2.1 不同引号字符串之间的区别2.2.2 转义字符和 python 输出函数2.2.3 字符串的相关操作&#xff08;字符串拼接、占位符、字符串…

python爬虫:实现动态网页的爬取,以爬取视频为例

引言: 爬虫也被称为网络蜘蛛(Spider),是一种自动化的软件程序,能够在互联网上漫游,按照一定的规则和算法抓取数据。 爬虫技术广泛应用于搜索引擎、 数据挖掘 、信息提取等领域,是互联网技术的重要组成部分。 摘要: 作为爬虫的初学者,网页越简单越好,因为网页的结构…

用Python代码锁定Excel单元格以及行和列

Excel能够帮助用户高效地组织数据&#xff0c;还支持复杂的公式计算和数据分析。而随着团队协作的日益频繁&#xff0c;保护数据的准确性和完整性变得尤为重要。在Excel表格中&#xff0c;我们可以通过锁定特定的单元格或区域&#xff0c;防止对单元格内容进行随意修改&#xf…

pycharm上传文件到服务器python代码部署到服务器

文章目录 step1&#xff1a;【Tools】—-【Deployment】—-【Configuration】step2&#xff1a;【 】—-【SFTP】—-【输入服务器名称】step3&#xff1a;【 Deployment path】—-【输入相对地址】step4&#xff1a;【 选中项目右击】—-【Deployment】—-【upload to xxxxx】…