代码随想录算法训练营第二十三天 | LeeCode 669. 修剪二叉搜索树,108. 将有序数组转换为二叉搜索树, 538. 把二叉搜索树转换为累加树

 题目链接:669. 修剪二叉搜索树 - 力扣(LeetCode)

class Solution {
public:TreeNode* trimBST(TreeNode* root, int low, int high) {if (root == nullptr ) return nullptr;if (root->val < low) {TreeNode* right = trimBST(root->right, low, high); // 寻找符合区间[low, high]的节点return right;}if (root->val > high) {TreeNode* left = trimBST(root->left, low, high); // 寻找符合区间[low, high]的节点return left;}root->left = trimBST(root->left, low, high); // root->left接入符合条件的左孩子root->right = trimBST(root->right, low, high); // root->right接入符合条件的右孩子return root;}
};

这道题还是有点难度的,难点在于如何跳过(删除)一些节点去寻找他的子节点。

这里还是看了答案,自己有点混乱。

还是递归的老方法,从根节点出发,如果是比最小值还要小的就往右找,可以直接舍弃这个值找更大的符合的,同理,比最大值还要大的就往左找就行。在这里面有一些细节要注意一下,我们返回的是他的子节点,所以要创建一个指针。然后就是进行一个遍历,符合条件的就不管,不符合条件的才进入if语句进行处理。

题目链接:108. 将有序数组转换为二叉搜索树 - 力扣(LeetCode)

class Solution
{
public:TreeNode *sortedArrayToBST(vector<int> &nums){if(nums.size()==0) return nullptr;int mid=(nums.size()-1)/2;TreeNode *root=new TreeNode(nums[mid]);vector<int> leftn(nums.begin(),nums.begin()+mid);if(leftn.size()!=0) root->left=sortedArrayToBST(leftn);vector<int> rightn(nums.begin()+mid+1,nums.end());if(rightn.size()!=0) root->right=sortedArrayToBST(rightn);return root;}
};

挺简单的一道题,我看了解析,发现我写的空间复杂度比较高。

因为是有序数组转二叉搜索树,关系已经是很对应了。我们递归找数组中间节点就行。

题目链接:538. 把二叉搜索树转换为累加树 - 力扣(LeetCode)

class Solution
{
private:int preSum=0;void reverseInOrder(TreeNode *root){if(!root) return;reverseInOrder(root->right);root->val+=preSum;preSum=root->val;reverseInOrder(root->left);}
public:TreeNode *convertBST(TreeNode *root){reverseInOrder(root);return root;}
};

这道题目乍一看好像很复杂。仔细想想后就会发现,这不是一个顺序反转的中序遍历吗。

中序遍历是左中右,这道题我们只要按照右中左的方式来累加就行了。

一个比较巧妙的技巧就是把这个累加值当作一个类的成员变量,这样子就可以在递归之外来改变他的值。

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

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

相关文章

防御保护---内容保护

文章目录 目录 文章目录 一.防火墙内容安全概述 二.深度识别技术&#xff08;DFI/DPI&#xff09; 深度包检测技术&#xff08;DPI&#xff09; 深度流检测技术&#xff08;DFI&#xff09; 两者区别 三.入侵防御IPS 一.防火墙内容安全概述 防火墙内容安全是防火墙的一个重…

软件测试方法_边界值分析法

目录&#xff1a; ①边界值分析法的介绍和概念 ②边界值分析法的原理和思想 ③单缺陷假设和多缺陷假设 ④边界值测试数据类型 ⑤内部边界值分析 ⑥各类边界值测试介绍 ⑦基于边界值分析方法选择测试用例的原则 ⑧边界值分析法的实例分析 1、边界值分析法的介绍和概念 …

Kubernetes集群的扩容、优化 -1

1. 什么是Kubernetes集群的扩容&#xff1f; Kubernetes集群的扩容指的是增加集群中的计算资源&#xff0c;以满足应用程序不断增长的需求。 Kubernetes是一个开源的容器编排平台&#xff0c;它允许用户部署、管理和扩展容器化的应用程序。在Kubernetes中&#xff0c;当应用程…

全面解读视频生成模型Sora

2024年2月15日&#xff0c;OpenAI在其官网发布了《Video generation models as world simulators》的报告&#xff0c;该报告提出了作为世界模拟器的视频生成模型Sora。 OpenAI对Sora介绍如下&#xff1a; We explore large-scale training of generative models on video dat…

Java进阶之旅第十四天(doge

Java进阶之旅第十四天&#xff08;doge 打印流 特点&#xff1a; 分类: PrintStream&#xff08;字节打印流&#xff09;PrintWriter&#xff08;字符打印流&#xff09;1.打印流只操作文件的目的地&#xff0c;不操作数据源2.特有的写出方法可以实现->数据原样写出3.特有…

力扣96不同的二叉搜索树详解

最近在写动态规划的题目&#xff0c;这些题目的标签都标有数学&#xff0c;说来也是找规律题&#xff0c;但是这个规律真不是正常情况下可以找到的&#xff0c;即使看了解析有时候也写不出来&#xff0c;今天难得看了点解析就自己写出来的&#xff0c;因此分享一下这道题的想法…

C# Winfrom实现的肺炎全国疫情实时信息图

运行结果&#xff1a; using System; using System.Drawing; using System.Text; using NSoup; using NSoup.Nodes; using System.IO; using System.Net; using System.Text.RegularExpressions; using System.Windows.Forms;namespace Pneumonia {public partial class MainFo…

docker (七)-部署容器

实战开始&#xff1a; 1 docker 部署 kafka 集群&#xff0c;并验证 参考 Docker搭建Kafka集群 优秀文档 2 docker 部署 mysql 参考上一篇docker(六) 3.docker 部署 zabbix 参考 docker部署zabbix 优秀文档 BUG&#xff1a;根据这篇文章部署后&#xff0c;发现zabbix-s…

vue封装el-table表格组件

先上效果图&#xff1a; 本文包含了具名插槽、作用域插槽、jsx语法三种&#xff1a; Render.vue&#xff08;很重要&#xff0c;必须有&#xff09;: <script> export default {name: "FreeRender",functional: true,props: {scope:Object,render: Functio…

docker 使用运行指令讲解

1、新建运行并挂载容器 docker run -d -p 80:80 -v /path/on/host:/path/in/container nginx docker run 指令讲解 docker run [OPTIONS] IMAGE [COMMAND] [ARG...] option 作用 -i 以交互模式运行容器&#xff0c;通常与 -t 同时使用 -t 启动容器后&#xff0c;为容器…

面试题 17.23. 最大黑方阵

文章目录 题意思路代码 题意 题目链接 找到最长的边都是0的正方形&#xff0c;如果长度想等&#xff0c;尽可能起点小 思路 暴力剪枝dp &#xff0c;预处理每个点的上下左右最长长度&#xff0c;再去枚举长度去转移 代码 // 力大飞砖 class Solution { public:vector<…

6.2 数据库

本节介绍Android的数据库存储方式--SQLite的使用方法&#xff0c;包括&#xff1a;SQLite用到了哪些SQL语法&#xff0c;如何使用数据库管理操纵SQLitem&#xff0c;如何使用数据库帮助器简化数据库操作&#xff0c;以及如何利用SQLite改进登录页面的记住密码功能。 6.2.1 SQ…

如何取消和设置MultiIndex(pandas)

什么是多重索引&#xff1f; 多重索引是这样的。 有点烦&#xff0c;所以研究了如何摆脱它。 [如何取消] 对于df 中的列或行。 下面显示了两种方法。 #Index df.index df.index.get_level_values(0) df.index df.index.droplevel(1)#Column df.columns df.columns.get_l…

Word 文档中的图片另存为 .jpg 格式图片

Word 文档中的图片另存为 .jpg 格式图片 1. Office 按钮 -> 另存为2. 筛选过的网页 (*.htm;*.html)3. 查看生成文件夹References 1. Office 按钮 -> 另存为 2. 筛选过的网页 (*.htm;*.html) ​​​ 3. 查看生成文件夹 References [1] Yongqiang Cheng, https://yongq…

春晚刘谦的魔术动画

文章目录 前言约瑟夫问题刘谦魔术拆解魔术工程化前言 有人曾经说过“魔术的尽头是数学”,一些看似简单的魔术表演背后其实蕴含着深刻的数学理论,2024年春晚刘谦的魔术节目就深刻的阐释了数学与魔术这样一种微妙的关系,其中就涉及到著名的约瑟夫问题,为此我们来一探究竟。 …

(十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)

简述 操作路径如下: 作用:通过逐步增加线程数来模拟用户并发访问。配置:设置This group will start、First,wait for 、Then start、Next , add等参数。使用场景:模拟逐步增长的并发访问,观察应用程序的性能变化。优点:适用于测试应用程序在逐步增加负载下的性能表现。…

全面总结!加速大模型推理的超全指南来了!

2023 年&#xff0c;大型语言模型&#xff08;LLM&#xff09;以其强大的生成、理解、推理等能力而持续受到高度关注。然而&#xff0c;训练和部署 LLM 非常昂贵&#xff0c;需要大量的计算资源和内存&#xff0c;因此研究人员开发了许多用于加速 LLM 预训练、微调和推理的方法…

BlackberryQ10 是可以安装 Android 4.3 应用的

BlackberryQ10 是可以安装 Android 4.3 应用的 最近淘了个 Q10 手机&#xff0c;非常稀罕它&#xff0c;拿着手感一流。这么好的东西&#xff0c;就想给它装点东西&#xff0c;但目前所有的应用都已经抛弃这个安卓版本了。 一、开发环境介绍 BlackBerry Q10 的 安卓版本是 4.…

NestJS入门8:拦截器

前文参考&#xff1a; NestJS入门1&#xff1a;创建项目 NestJS入门2&#xff1a;创建模块 NestJS入门3&#xff1a;不同请求方式前后端写法 NestJS入门4&#xff1a;MySQL typeorm 增删改查 NestJS入门5&#xff1a;加入Swagger NestJS入门6&#xff1a;日志中间件 Nes…

python-pyqt5-工具按钮(QToolButton)添加菜单(QMenu)

QToolButton提供了比普通按钮更丰富的功能。它可以显示一个图标、一个文本或二者结合&#xff0c;还支持各种样式和行为&#xff0c;例如弹出菜单或多种动作模式 样式 setToolButtonStyle(Qt.ToolButtonStyle) # 设置按钮样式风格# 参数Qt.ToolButtonIconOnly …