代码随想录训练营第二十一天 669修建二叉搜索树 108将有序数组转换为二叉搜索树 538把二叉搜索树转换为累加树

第一题:

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

思路:

终止条件:

如果root本身为null的话直接返回null;

如果当前节点的val值小于low边界,说明当前这个节点是要删除的节点,但是不能直接返回null,因为在这个节点的右子树中可能存在区间内的值,因此需要继续向右子树遍历,观察右子树中的每个节点值都在区间内。

同理当前节点的值大于high边界同上一样的但是相反的操作。

然后执行递归逻辑

root -> left = trimBST(root -> left, low, high);

root -> right = trimBST(root -> right, low, high);

代码如下:

/*** 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* trimBST(TreeNode* root, int low, int high) {if(root == nullptr) return nullptr;if(root -> val < low){return trimBST(root -> right, low, high);}if(root -> val > high){return trimBST(root -> left, low, high);}root -> left = trimBST(root -> left, low, high);root -> right = trimBST(root -> right, low, high);return root;}
};

第二题:

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

思路:

因为题目提到了要求是平衡的二叉搜索树,因此我们直接取数组的中间元素作为root,然后根据mid来划分左右数组区间,依次向左和向右递归两个数组区间。

代码如下:

/*** 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* sortedArrayToBST(vector<int>& nums) {if(nums.size() == 0) return nullptr;int i = 0, j = nums.size() - 1;int mid = i + (j - i) / 2;TreeNode* root = new TreeNode(nums[mid]);vector<int> numsleft(nums.begin(), nums.begin() + mid);vector<int> numsright(nums.begin() + mid + 1, nums.end());root -> left = sortedArrayToBST(numsleft);root -> right = sortedArrayToBST(numsright);return root;}
};

第三题:

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

思路:

采用后序遍历的方式 一开始先向右遍历,然后中再向前。

/*** 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* pre = nullptr;TreeNode* convertBST(TreeNode* root) {if(root == nullptr) return nullptr;convertBST(root -> right);if(pre != nullptr){root -> val += pre -> val;}pre = root;convertBST(root -> left);return root;}
};

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

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

相关文章

软件构造 | Abstract Data Type (ADT)

软件构造 | Abstract Data Type (ADT) ​ 抽象数据类型与表示独立性&#xff1a;如何设计良好的抽象数据结构&#xff0c;通过封 装来避免客户端获取数据的内部表示&#xff08;即“表示泄露”&#xff09;&#xff0c;避免潜在 的bug——在client和implementer之间建立“防火…

鸿蒙开发Ability Kit(程序框架服务):【FA模型切换Stage模型指导】 配置文件差异

配置文件的差异 FA模型应用在[config.json文件]中描述应用的基本信息&#xff0c;一个应用工程中可以创建多个Module&#xff0c;每个Module中都有一份config.json文件。config.json由app、deviceConfig和module三部分组成&#xff0c;app标签用于配置应用级别的属性&#xff…

裸机与操做系统区别(RTOS)

声明&#xff1a;该系列笔记是参考韦东山老师的视频&#xff0c;链接放在最后&#xff01;&#xff01;&#xff01; rtos&#xff1a;这种系统只实现了内核功能&#xff0c;比较简单&#xff0c;在嵌入式开发中&#xff0c;某些情况下我们只需要多任务&#xff0c;而不需要文件…

网络构建和设计方法_2.网络技术遴选

网络遴选工作是通信系统设计中关键的一项工作&#xff0c;根据计划实施的网络建设要求&#xff0c;遴选工作通常分为局域网、广域网和路由协议的选择。 1.局域网技术遴选 1&#xff09;生成树协议&#xff08;Spanning Tree Protocol&#xff0c;STP&#xff09; 在局域网构建…

前端项目结构介绍与Vue-cli(脚手架)环境搭建

传统的前端项目结构 一个项目中有许多html文件 每一个html文件都是相互独立的 如果需要在页面中导入一些外部依赖的组件(vue.js,elementUI),就需要在每一个html文件中引用都导入,十分的麻烦 而且这些外部组件都需要在其官网中自行下载,也增加了导入的繁琐程度 当今的前端项…

PMBOK® 第六版 实施整体变更控制

目录 读后感—PMBOK第六版 目录 对于变化的态度&#xff0c;个人引用两句加以阐释&#xff0c;即“流水不腐&#xff0c;户枢不蠹”与“不以规矩&#xff0c;不能成方圆”。这看似相互矛盾&#xff0c;实则仿若两条腿总是一前一后地行进。有一个典型的例子&#xff0c;“自由美…

基于IM948(Low-cost IMU+蓝牙)模块的高精度PDR(Pedestrian Dead Reckoning)定位系统 — 可以提供模块和配套代码

一、背景与意义 行人PDR定位系统中的PDR&#xff08;Pedestrian Dead Reckoning&#xff0c;即行人航位推算&#xff09;背景意义在于其提供了一种在GPS信号不可用或不可靠的环境下&#xff0c;对行人进行精确定位和导航的解决方案。以下是关于PDR背景意义的详细描述&#xff1…

更正:VMWARE出现错误关闭Hyper-V会导致Docker Desktop报错

之前使用VMWARE时出现错误&#xff0c;当时在服务处将《HV主机服务》关闭&#xff0c;并使用命令 bcdedit /set hypervisorlaunchtype off 造成Docker Desktop无法使用 解决方法&#xff1a; 运行bcdedit /set hypervisorlaunchtype auto 注意这里最后不是on也不是start 重启…

Python代码打包成exe应用

目录 一、前期准备 二、Pyinstaller打包步骤 Pyinstaller参数详解 三、测试 Spec 文件相关命令 一、前期准备 &#xff08;1&#xff09;首先&#xff0c;我们需要确保你的代码可以在本地电脑上的pycharm正常运行成功。 &#xff08;2&#xff09;我们要先安装Pyinstalle…

AI智能体 | 扣子Coze 工作流中如何嵌入代码,看这一篇就够了

Coze的工作流中除了能嵌入大模型&#xff0c;插件&#xff0c;图像流&#xff0c;其他工作流外&#xff0c;还能嵌入代码。嵌入代码的好处是对一些复杂的返回结果进行二次处理。 Coze的代码支持js和python两种语言。这次用python来做演示介绍 在节点中选择代码 弹出对话框如下…

python-docx 设置页面边距、页眉页脚高度

本文目录 前言一、docx 页面边距在哪里二、对 <w:pgMar> 的详细说明1、上边距的说明2、右边距的说明3、下边距的说明4、左边距的说明5、页眉高度的说明6、页脚高度的说明三、设置 docx 页边距、页眉页脚高度1、完整代码2、代码执行效果图四、补充一些内容1、页面边距的两…

conda安装管理配置

原文链接&#xff1a;conda管理配置 导言 安装卸载 卸载 卸载 docker sudo rm -r /opt/anaconda3 #conda安装位置安装 从镜像archive中下载sh脚本安装 bash ./software/Anaconda3-2024.02-1-Linux-x86_64.sh -b -p /opt/anaconda3 #conda安装位置管理 查看 conda --ver…

Docker Compose:简化多容器管理的利器

在现代的应用开发和部署过程中&#xff0c;Docker已经成为不可或缺的工具。它通过容器化技术&#xff0c;使得应用的部署变得更加轻松和高效。然而&#xff0c;当我们需要管理和运行多个容器时&#xff0c;单纯依赖Docker命令行工具可能会显得繁琐且复杂。这时&#xff0c;Dock…

js中定义类的方式:

在JavaScript中&#xff0c;有几种定义类的方式&#xff0c;但最常用的是使用ES6引入的class关键字。以下是使用class定义类的一个简单示例&#xff1a; class Person {// 构造函数&#xff0c;用于初始化对象的属性constructor(name, age) {this.name name;this.age age;}/…

CCS的安装步骤

CCS的安装步骤 安装之前有几件重要的事情要做&#xff1a; 首先肯定是要下载安装包啦&#xff01;点击此处是跳到官网下载地址安装包不能处的路径中不能包含中文关闭病毒防护和防火墙&#xff0c;以及其他杀毒软件最后是在重启后进行安装 主要的步骤如下&#xff1a; 找到安…

数据库系统概论-第10章数据库恢复技术

10.1事务的基本概念 ①事务&#xff1a;用户宝义的一个数据库操作序列&#xff0c;是一个不可分割的工作单位。一个程序中包含多个事务。 事务通常是以BEGIN TRANSACTION开始&#xff0c;以COMMIT或ROLLBACK结束。COMMIT表示提交。ROLLBACK表示回滚&#xff0c;即在事务运行过…

电脑高手推荐:三款超实用软件,让你的电脑如虎添翼!

7Zip 7-Zip是一款免费且开源的文件压缩工具&#xff0c;支持多种文件格式&#xff0c;包括其自带的7z格式、ZIP、GZIP、BZIP2和TAR等。该软件由Igor Pavlov于1999年开发&#xff0c;具有高压缩比的特点。7-Zip不仅可以在Windows操作系统上使用&#xff0c;还可以在Unix-like的操…

【MySQL】数据库事务详解

文章目录 前言1. 事务的定义2. 事务的四个特性2.1 原子性2.2 一致性2.3 隔离性2.4 持久性 3. 事务的并发问题3.1 脏读3.2 不可重复读3.3 幻读3.4 更新丢失 4. 事务的隔离级别5. 事务的使用结语 前言 假设我们现在需要操作数据库进行转账&#xff0c;A 给 B 转账 100 块钱&…

高效修复机床导轨磨损,保障加工精度!

机床导轨是支承和引导运动构件沿着一定轨迹运动的传动装置&#xff0c;在机器设备中是个十分重要的部件&#xff0c;在机床中是常见的部件。机床的加工精度与导轨精度有直接的联系&#xff0c;且导轨一旦损坏&#xff0c;维修较复杂且困难。我们简单总结了以下几点对于机床导轨…

2741. 特别的排列

Powered by:NEFU AB-IN Link 文章目录 2741. 特别的排列题意思路代码 2741. 特别的排列 题意 给你一个下标从 0 开始的整数数组 nums &#xff0c;它包含 n 个 互不相同 的正整数。如果 nums 的一个排列满足以下条件&#xff0c;我们称它是一个特别的排列&#xff1a; 对于…