代码随想录算法训练营第23期day19| 654.最大二叉树、617.合并二叉树、700.二叉搜索树中的搜索、98.验证二叉搜索树

目录

一、(leetcode 654)最大二叉树

二、(leetcode 617)合并二叉树

三、(leetcode 700)二叉搜索树中的搜索

四、(leetcode 98)验证二叉搜索树


一、(leetcode 654)最大二叉树

力扣题目地址

状态:AC。

和昨天的中序+后/前序遍历序列构建二叉树思路类似,每次递归寻找数组中的最大值,根据最大值的索引来切分左右子序列进行递归生成,可以用索引下标来避免重复生成vector带来的开销

class Solution {
public:TreeNode* traversal(vector<int>& nums, int begin, int end){if(begin == end) { return nullptr; }int max_num = INT_MIN, max_index = begin;// 确定最大值的索引for(int i = begin; i < end; ++i){if(max_num < nums[i]){max_num = nums[i];max_index = i;}}TreeNode* node = new TreeNode(max_num);// 进行左右子数组划分int left_left = begin, left_right = max_index;int right_left = max_index + 1, right_right = end;node->left = traversal(nums, left_left, left_right);node->right = traversal(nums, right_left, right_right);return node;}TreeNode* constructMaximumBinaryTree(vector<int>& nums) {return traversal(nums, 0, nums.size());}
};

二、(leetcode 617)合并二叉树

力扣题目链接

状态:AC。

使用的方法可以AC但是不够简洁,留待后续改进

class Solution {
public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {//进行前序遍历,如果两棵树都为空则返回空节点if(root1 == nullptr && root2 == nullptr){return nullptr;}TreeNode* node = new TreeNode(0);if(root1 != nullptr && root2 != nullptr){node->val = root1->val + root2->val;node->left = mergeTrees(root1->left, root2->left);node->right = mergeTrees(root1->right, root2->right);}else if(root1){node->val = root1->val;node->left = mergeTrees(root1->left, nullptr);node->right = mergeTrees(root1->right, nullptr);}else{node->val = root2->val;node->left = mergeTrees(nullptr, root2->left);node->right = mergeTrees(nullptr, root2->right);}return node;  }
};

三、(leetcode 700)二叉搜索树中的搜索

力扣题目地址

状态:AC。

简单的前序遍历比较

class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {if(root == nullptr) return nullptr;//前序遍历if(root->val == val){return root;}else if(root->val < val){return searchBST(root->right, val);}else{return searchBST(root->left, val);}return nullptr;}
};

四、(leetcode 98)验证二叉搜索树

力扣题目链接

状态:思路错误,不能简单地比较根节点和左右子节点的大小。

这道题可以通过中序遍历的顺序判断值是不是递增来判断,注意除了上面的那个思路问题,在实现时用于比较的值maxVal需要使用long long来初始化,以防测试用例中有INT_MIN。

class Solution {
public:long long maxVal = LONG_MIN;bool isValidBST(TreeNode* root) {if(root == nullptr) return true;bool left = isValidBST(root->left);//中序遍历查看是否符合递增if(root->val > maxVal){maxVal = root->val;}else{return false;}bool right = isValidBST(root->right);return left && right;}
};

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

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

相关文章

Vega Prime入门教程14.01:调用VAPS XT DLL

本文首发于&#xff1a;Vega Prime入门教程14.01&#xff1a;调用VAPS XT DLL 在VAPS XT系列教程中提到过Vega Prime可以直接调用Drawing Integration生成的dll&#xff0c;本文来测试这个功能效果。 本系列使用的是VP18.0&#xff0c;使用的是VC14.0&#xff08;VS2015&…

Android Studio修改模拟器AVD Manger目录

Android Studio修改虚拟机AVD Manger目录 1、在AS的设备管理器Device Manager中删除原来创建的所有虚拟机&#xff08;Android Virtual Device&#xff09;&#xff1b; 2、新建一个自定义的AVD目录&#xff0c;例如&#xff1a;D:\Android\AndroidAVD 3、在高级系统设置中增加…

hive建表指定列分隔符为多字符分隔符实战(默认只支持单字符)

1、背景&#xff1a; 后端日志采集完成&#xff0c;清洗入hive表的过程中&#xff0c;发现字段之间的单一字符的分割符号已经不能满足列分割需求&#xff0c;因为字段值本身可能包含分隔符。所以列分隔符使用多个字符列分隔符迫在眉睫。 hive在建表时&#xff0c;通常使用ROW …

【Zookeeper专题】Zookeeper选举Leader源码解析

目录 前言阅读建议课程内容一、ZK Leader选举流程回顾二、源码流程图三、Leader选举模型图 学习总结 前言 为什么要看源码&#xff1f;说实在博主之前看Spring源码之前没想过这个问题。因为我在看之前就曾听闻大佬们说过【JavaCoder三板斧&#xff1a;Java&#xff0c;Mysql&a…

Arduino驱动LIS2DH三轴加速度传感器(惯性测量传感器篇)

目录 1、传感器特性 2、硬件原理图 3、控制器和传感器连线图 4、驱动程序 LIS2DH加速度计相对传统的ADXL345在稳定性以及功耗上都有一定的优化,低功耗模式下仅为2μA(普通模式11μA),并且最高支持5.3KHz输出频率,拥有2g/4g/8g/16g四档可选量程&

Kafka和RabbitMQ的对比

Rabbitmq比kafka可靠&#xff0c;kafka更适合IO高吞吐的处理&#xff0c;比如ELK日志收集 Kafka和RabbitMq一样是通用意图消息代理&#xff0c;他们都是以分布式部署为目的。但是他们对消息语义模型的定义的假设是非常不同的。 a) 以下场景比较适合使用Kafka。如果有大量的事…

程序员不写注释的原因及解决方案

目录 一、原因说明 二、问题分析 三、解决方案 在软件开发领域&#xff0c;注释的重要性不言而喻。它们不仅可以提高代码的可读性&#xff0c;还能帮助其他开发者更好地理解代码逻辑。然而&#xff0c;我们常常发现许多程序员在编写代码时并不喜欢添加注释。那么&#xff0c…

MAC 版PowerPoint 插入latex数学公式

参考链接&#xff1a; [IguanaTex Mac] PPT 中快捷导入LaTeX公式 - 知乎

Linux shell编程学习笔记9:字符串运算 和 if语句

Linux Shell 脚本编程和其他编程语言一样&#xff0c;支持算数、关系、布尔、字符串、文件测试等多种运算&#xff0c;同样也需要进行根据条件进行流程控制&#xff0c;提供了if、for、while、until等语句。 上期学习笔记中我们研究了字符串数据的使用&#xff0c;今天我们研…

cf 1886A

题目是输入一个数字&#xff0c;分解成三个数字的和&#xff0c;这三个数字都不相同&#xff0c;并且都不可以被三整除&#xff0c;如果存在输出YES并且输出任意一组可能的三个数字&#xff0c;否则输出NO 代码 #include<bits/stdc.h> using namespace std;int main() …

【Leetcode】202.快乐数

一、题目 1、题目描述 编写一个算法来判断一个数 n 是不是快乐数。 「快乐数」 定义为: 对于一个正整数,每一次将该数替换为它每个位置上的数字的平方和。然后重复这个过程直到这个数变为 1,也可能是 无限循环 但始终变不到 1。如果这个过程 结果为 1,那么这个数就是快乐…

Python:温度转换(摄氏度与华氏度)

Python:温度转换&#xff08;摄氏度与华氏度&#xff09; TempStrinput("请输入带有符号的温度值&#xff1a;") if TempStr[-1] in [F,f]:C(eval(TempStr[0:-1])-32)/1.8print("转换后的温度是{:.2f}C".format(C)) elif TempStr[-1] in[C,c]:F1.8*eval(T…

定时任务Apscheduler实践案例

定时任务Apscheduler实践案例 参考文章 https://blog.csdn.net/weixin_44799217/article/details/127353134 实现案例 本案例是使用定时任务apscheduler实现的每个三分钟发送一次邮件的任务 实现代码 import time from apscheduler.schedulers.blocking import BlockingSched…

设备管理工具

做了一个代理类,抽象出来后在注册表中&#xff0c;查找已经注册的设备 python 中 dict 和 lua 中的 table 一样高效 先初始化找到的设备通信程序,底层接口准备好C,这个设备调试界面就是可以用的,剩下就是MV了 软件升级已经稳定可用了 包括软件的备份和回滚操作登录时为设备页面…

持续集成交付CICD:Jenkins部署

目录 一、理论 1.CI/CD 2.Gitlab内置持续集成 3.Jenkins安装与部署 4.Gitlab服务部署 5.Jenkins服务部署 6.Tomcat服务部署 7.Jenkins–Pipeline流水线项目构建 二、实验 1.Gitlab服务部署 2.Jenkins服务部署 3.Tomcat服务部署 4.Jenkins–Pipeline流水线项目构建…

十六、代码校验(1)

本章概要 测试 单元测试JUnit测试覆盖率的幻觉 你永远不能保证你的代码是正确的&#xff0c;你只能证明它是错的。 让我们先暂停编程语言特性的学习&#xff0c;看看一些代码基础知识。特别是能让你的代码更加健壮的知识。 测试 如果没有测试过&#xff0c;它就是不能工作的…

GPT实战系列-Baichuan2本地化部署实战方案

目录 一、百川2(Baichuan 2)模型介绍 二、资源需求 模型文件类型 推理的GPU资源要求 模型获取途径 国外: Huggingface 国内:ModelScope 三、部署安装 配置环境 安装过程

计算机毕业设计选什么题目好?springboot智慧养老中心管理系统

✍✍计算机编程指导师 ⭐⭐个人介绍&#xff1a;自己非常喜欢研究技术问题&#xff01;专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目&#xff1a;有源码或者技术上的问题欢迎在评论区一起讨论交流&#xff01; ⚡⚡ Java实战 |…

一文吃透python常见设计模式

目录 六大设计原则&#xff08; SOLID &#xff09;单一职责原则里氏替换原则迪米特法则接口隔离原则依赖倒置原则开闭原则 单例模式&#xff08;创建型&#xff09;概述实现使用装饰器使用基类使用元类 工厂模式&#xff08;创建型&#xff09;概述简单工厂工厂方法抽象工厂 建…

Response Status Code 301、302

目录 Information Django redirect Influence Information HTTP状态码301、302和304分别表示以下情况&#xff1a; codeinformation301&#xff08;Moved Permanently&#xff09; 永久重定向。当请求的资源已经被永久地移动到了一个新的URI时&#xff0c;服务器会返回这个…