【leetcode题解C++】654.最大二叉树 and 617.合并二叉树

654. 最大二叉树

给定一个不重复的整数数组 nums 。 最大二叉树 可以用下面的算法从 nums 递归地构建:

  1. 创建一个根节点,其值为 nums 中的最大值。
  2. 递归地在最大值 左边 的 子数组前缀上 构建左子树。
  3. 递归地在最大值 右边 的 子数组后缀上 构建右子树。

返回 nums 构建的 最大二叉树 

示例 1:

输入:nums = [3,2,1,6,0,5]
输出:[6,3,5,null,2,0,null,null,1]
解释:递归调用如下所示:
- [3,2,1,6,0,5] 中的最大值是 6 ,左边部分是 [3,2,1] ,右边部分是 [0,5] 。- [3,2,1] 中的最大值是 3 ,左边部分是 [] ,右边部分是 [2,1] 。- 空数组,无子节点。- [2,1] 中的最大值是 2 ,左边部分是 [] ,右边部分是 [1] 。- 空数组,无子节点。- 只有一个元素,所以子节点是一个值为 1 的节点。- [0,5] 中的最大值是 5 ,左边部分是 [0] ,右边部分是 [] 。- 只有一个元素,所以子节点是一个值为 0 的节点。- 空数组,无子节点。

示例 2:

输入:nums = [3,2,1]
输出:[3,null,2,null,1]

思路:要找最大值来创建二叉树,考虑到可能会用到迭代,通过遍历来找到最大结点在数组中的下标,对左右孩子结点进行同样的操作,所以会需要到一个用于迭代的函数,参数中需要包括到范围(以确定左右子树所包含的元素在数组中的位置)。

代码实现:

class Solution {
public:TreeNode *generate(const vector<int>& nums, int begin, int end) {if(begin >= end) return nullptr;int maxNumIdx = begin;for (int i = begin; i < end; ++i) {if (nums[i] > nums[maxNumIdx]) maxNumIdx = i;}TreeNode *root = new TreeNode(nums[maxNumIdx]);root->left = generate(nums, begin, maxNumIdx);root->right = generate(nums, maxNumIdx + 1, end);return root;}TreeNode* constructMaximumBinaryTree(vector<int>& nums) {return generate(nums, 0, nums.size());}
};

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]

思路:在之前判定一颗二叉树是否对称时,我们使用到了队列(判断一棵树的左右子树),而此处,同样可以使用一个队列来对对应的结点进行处理。用到迭代的方法,修改第一棵树,而不是重新创建一棵树。

代码实现:

class Solution {
public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if(!root1) return root2;if(!root2) 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 && node2->left) {que.push(node1->left);que.push(node2->left);}if(node1->right && node2->right) {que.push(node1->right);que.push(node2->right);}if(!node1->left && node2->left) {node1->left = node2->left;}if(!node1->right && node2->right) {node1->right = node2->right;}}return root1;}
};

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

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

相关文章

C++ QT入门2——记事本功能实现与优化(事件处理+基本控件)

C QT入门2——记事本功能优化&#xff08;事件处理基本控件&#xff09; 一、记事本功能优化编码乱码问题QComboBox下拉控件QString、string、char * 间的数据转化编码问题解决整合 光标行列值显示记事本打开窗口标题关闭按钮优化—弹窗提示快捷键设计 二、☆ QT事件处理事件处…

flutter GridView控件实践

gridView顶部自带padding问题 如图所示&#xff1a; 顶部有一个比较大的padding。 如何处理&#xff1a;给gridView设置&#xff1a;padding: EdgeInsets.zero,

关于torch_xla.core.xla_model无法导入的问题

直接使用pip install或github中的代码发现仍然无法成功导入torch_xla.core.xla_model&#xff0c; 在conda中conda list发现存在torch_xla为1.0版本&#xff0c;尝试更新发现只有该版本。发现conda_xla库内除了__init__.py以外&#xff0c;没有任何文件。在__init__.py中提示包…

算法价值2-空间复杂度

空间复杂度是算法在运行过程中所需的额外空间和输入规模之间的关系。与时间复杂度类似&#xff0c;空间复杂度也通常使用大O符号&#xff08;O&#xff09;来表示。 以下是一些常见的空间复杂度的例子&#xff1a; 1. O(1) - 常数空间复杂度 表示算法的空间需求是一个常数&am…

Java 正则匹配sql

文章目录 正则匹配sql表名称insert intoupdate 正则表达式什么时候要加^$ 在线正则校验 正则匹配sql表名称 insert into insert into PING_TABLE (CODE, NAME) VALUES(0, 待提交),(1, 审核中),(2, 审核通过),(3, 已驳回); regex -> insert\sinto\s(\w)\s*\(?update upda…

UnityShader(十三)Unity内置的函数

在计算光照模型时我们需要得到许多数据&#xff0c;比如光源方向、视角方向这种基本信息。 在之前的例子中都是自行在代码里计算的&#xff0c;比如&#xff1a; normalize(_WorldSpaceLight0Pos.xyz) 得到光源方向&#xff08;这种方法实际只适用平行光&#xff09; normaliz…

Spring MVC 框架无法找到合适的消息转换器

报错信息如下&#xff1a; 2024-02-02 16:58:29.832 ERROR 15768 --- [nio-8080-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet] : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exce…

架构整洁之道-组件构建原则

5 组件构建原则 大型软件系统的架构过程与建筑物修建很类似&#xff0c;都是由一个个小组件组成的。所以&#xff0c;如果说SOLID原则是用于指导我们如何将砖块砌成墙与房间的&#xff0c;那么组件构建原则就是用来指导我们如何将这些房间组合成房子的。 5.1 组件 组件是软件的…

Go语言学习踩坑记

go: go.mod file not found in current directory or any parent directory; see go help mod 解决 资源下载&#xff1a; 序号文件地址1 1、Go IDE liteidex38.3-win64-qt5.15.2.zip Release x38.3 visualfc/liteide GitHub2 2、Go语言的编译环境 go1.21.6.windows-amd64.m…

想好新年去哪了吗?合合信息扫描全能王用AI“留住”年味

还有不到十天&#xff0c;除夕就要到了。近几年春节假期中&#xff0c;有人第一次带着孩子直击海面冰风&#xff0c;坐船回老家&#xff1b;也有人选择“漫游”国内外&#xff0c;在旅行中迎接新春的朝气。合合信息旗下扫描全能王APP通过AI扫描技术&#xff0c;提供了一种全新的…

Acwing---798.差分矩阵

差分矩阵 1.题目2.基本思想3.代码实现 1.题目 输入一个 n n n 行 m m m列的整数矩阵&#xff0c;再输入 q q q 个操作&#xff0c;每个操作包含五个整数 x 1 , y 1 , x 2 , y 2 , c x1,y1,x2,y2,c x1,y1,x2,y2,c&#xff0c;其中 ( x 1 , y 1 ) (x1,y1) (x1,y1) 和 ( x …

51单片机——wifi模块

51单片机——wifi模块 1.AT指令 #include "reg52.h" #include "intrins.h" #include <string.h>#define SIZE 12 sfr AUXR 0x8E; sbit D5 P3^7; char cmd[SIZE];code char LJWL[] "ATCWJAP\"TP-LINK_3E30\",\"18650711783…

美团组织架构调整;微信新安装包突破700MB;《红毯先生》预售总票房破1000万;比亚迪汽车1月销量约20.15万辆

今日精选 • 美团宣布组织架构调整&#xff0c;S-team成员王莆中将统管美团平台、到店到家等核心本地商业业务• 微信新安装包突破700MB• 《红毯先生》预售总票房破1000万• 比亚迪汽车1月销量约20.15万辆 科技动态 • 亚马逊推出生成式AI购物助手Rufus• 前程无忧与阿里云…

C语言中的内存操作函数:memcpy、memcmp与memset

一、memcpy —— 内存拷贝 void * memcpy ( void * destination, const void * source, size_t num ); memcpy函数用于将源内存区域的内容复制到目标内存区域。功能是将从source指向的内存起始位置连续num个字节的数据&#xff0c;原样复制到destination指向的内存区域。 例…

创新大赛专访丨移步到岗荣膺2023年度人力资源服务质量卓越品牌:“人财税法”综合解决方案专家

日前&#xff0c;2023第三届全国人力资源创新大赛颁奖典礼暨成果展圆满举行。自2023年10月份启动以来&#xff0c;大赛共吸引了457个案例报名参赛&#xff0c;经组委会专家团队评审严格审核&#xff0c;企业赛道共有103个案例获奖、72家企业、13位个人、7个产业园斩获荣誉。 广…

RocketMQ消息队列(一)—— 基本概念和消息类型

RocketMQ是一个来自阿里巴巴的分布式消息中间件&#xff0c;于2012年开源&#xff0c;并在2017年正式成为Apache顶级项目。据了解&#xff0c;包括阿里云上的消息产品以及收购的子公司在内&#xff0c;阿里集团的消息产品全线都运行在RocketMQ上&#xff0c;并且最近几年的双十…

mybatis的一级缓存和二级缓存

一、介绍 1、mybatis缓存&#xff1a; mybatis包含一个非常强大的查询缓存特性&#xff0c;可以非常方便的定制和配置缓存&#xff0c;通过缓存减少Java Application与数据库的交互次数&#xff0c;从而提升程序的运行效率。 2、mybatis一二级缓存 mybatis的缓存分为一级缓存…

Docker中配置MySql环境

目录 一、简单安装 1. 首先从Docker Hub中拉取镜像 2. 启动尝试创建MySQL容器&#xff0c;并设置挂载卷。 3. 查看mysql8这个容器是否启动成功 4. 如果已经成功启动&#xff0c;进入容器中简单测试 4.1 进入容器 4.2 登录mysql中 4.3 进行简单添加查找测试 二、主从复…

MySQL-----初识

一 SQL的基本概述 基本概述 ▶SQL全称: Structured Query Language&#xff0c;是结构化查询语言&#xff0c;用于访问和处理数据库的标准的计算机语言。SQL语言1974年由Boyce和Chamberlin提出&#xff0c;并首先在IBM公司研制的关系数据库系统SystemR上实现。 ▶美国国家标…

97 C++对象模型探索。局部静态对象,对象数组构造析构和内存分配

一&#xff0c;局部静态对象的构造和析构 如果我们不调用 静态对象 实例化的函数&#xff0c;则不会触发 静态对象的构造函数 局部静态对象&#xff0c;内存地址是在编译期间就确定好的&#xff0c;且会将内存初始化为0. 局部静态对象只会被构造一次。 局部静态对象的析构是…