C++数据结构与算法——二叉搜索树的修改与构造

C++第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C++查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更新,欢迎关注!

文章目录

  • 一、二叉搜索树中的插入操作(701)
  • 二、删除二叉搜索树中的节点(力扣450)
  • 三、修剪二叉搜索树(力扣669)
  • 四、将有序数组转换为二叉搜索树(力扣108)

一、二叉搜索树中的插入操作(701)

在这里插入图片描述

/*** 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* insertIntoBST(TreeNode* root, int val) {// 判断往哪插if(root==NULL){TreeNode * inSertVal = new TreeNode(val);return inSertVal;}if(val>root->val){// 往右插root->right= insertIntoBST(root->right,val);}else{root->left = insertIntoBST(root->left, val);}return root;}
};

在这里插入图片描述

二、删除二叉搜索树中的节点(力扣450)

/*** 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* deleteNode(TreeNode* root, int key) {// 1.没找到值if(root==NULL) return NULL;if(root->val==key){// 2. 左右子树都为空if(root->left==NULL&&root->right==NULL) {delete root;return NULL;}// 3. 左子树为空 右子树不为空else if(root->left==NULL&&root->right!=NULL){TreeNode * Rresult = root->right;delete root;return Rresult;}// 4. 左子树不为空,右子树为空else if(root->left!=NULL&&root->right==NULL){TreeNode * Rresult = root->left;delete root;return Rresult;}// 5. 左右字数都不为空else{// 把左子树接到右子树最左侧TreeNode * Tright = root->right;// 5.1 找到右子树的最左侧while(Tright->left!=NULL){Tright = Tright->left;}// 5.2 把左子树接到右子树最左侧Tright->left = root->left;// 5.3 返回右子树TreeNode * Rresult = root->right;delete root;return Rresult;}}else if(root->val<key){root->right =deleteNode(root->right,key);}else{root->left = deleteNode(root->left,key);}return root;}
};

在这里插入图片描述

三、修剪二叉搜索树(力扣669)

在这里插入图片描述

/*** 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==NULL) return NULL;if(root->val<low){// 删除所有左子树// 继续向右遍历TreeNode* Tright = trimBST(root->right,low,high);return Tright;}else if(root->val>high){// 删除右子树TreeNode* Tleft = trimBST(root->left,low,high);return Tleft;}root->left = trimBST(root->left,low,high);root->right = trimBST(root->right,low,high);return root;}
};

在这里插入图片描述

四、将有序数组转换为二叉搜索树(力扣108)

在这里插入图片描述

/*** 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) {TreeNode * root =  traversal(nums,0,nums.size()-1);return root;}TreeNode* traversal(vector<int>& nums,int left,int right){if(left>right) return NULL;int mid = (left+right)/2;TreeNode * root = new TreeNode(nums[mid]);root->left = traversal(nums,left,mid-1);root->right = traversal(nums,mid+1,right);return root;}
};

在这里插入图片描述

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

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

相关文章

【SpringBoot】-- 实现本地文件/图片上传到服务器生成url地址

在java项目中你可能会有以下需求&#xff1a;用户上传本地图片&#xff0c;然后展示在网页上。本篇文章将使用阿里云oss实现上传图片到oss&#xff0c;oss生成url。 一、准备工作 首先进入阿里云&#xff0c;按如下操作 进入创建页面&#xff0c;修改读写权限为公共读 然后进…

Android耗电分析之Battery Historian工具使用

Battery-Historian是谷歌推出的一款专门分析Bugreport的工具&#xff0c;是谷歌在2015年I/O大会上推出的一款检测运行在android5.0(Lollipop)及以后版本的设备上电池的相关信息和事件的工具&#xff0c;是一款对于分析手机状态&#xff0c;历史运行情况很好的可视化分析工具。 …

【网络原理】初识网络原理

目录 &#x1f384;网络发展史&#x1f338;独立模式&#x1f338;网络互连&#x1f33b;局域网LAN&#x1f33c;基于网线直连&#x1f33c;基于集线器组建&#x1f33c;基于交换机组建&#x1f33c;基于交换机和路由器组建 &#x1f33b;广域网WAN &#x1f333;网络通信基础&…

学习网络安全越早知道越好的事

网络安全专业最应该知道的血泪建议&#xff0c;希望大一就有人告诉你。 如果你是网络安全行业&#xff0c;那么大学四年千万不能就在宿舍打游戏度过&#xff0c; 大一你应该学习掌握基础的编程语言&#xff0c;比如Python&#xff0c;PHP&#xff0c;web前端&#xff0c;知道…

【STM32+OPENMV】矩形识别

一、准备工作 有关OPENMV最大色块追踪及与STM32通信内容&#xff0c;详情见【STM32HAL】与OpenMV通信 二、所用工具 1、芯片&#xff1a;STM32F103C8T6 2、CUBEMX配置软件 3、KEIL5 4、OPENMV 三、实现功能 寻找黑色矩形&#xff0c;并将最大矩形的四个边缘坐标发送给STM…

24V降压3.3V异步降压型DC-DC恒压芯片 H4110惠海半导体

H4110是一种内置30V耐压MOS&#xff0c;并且能够实现精确恒压以及恒流的异步降压型 DC-DC转换器&#xff1b; 支持 1A 持续输出电流,输出电压可调&#xff0c;最大可支持 100%占空比&#xff1b;通过调节 FB端口的分压电阻&#xff0c;可以输出 2.5V到 22V 的稳定电压 。H4110 …

揭秘Vue中v-model的内部工作机制

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

使用Weaviate向量数据库:从Embeddings到Applications (Multilingual Search和RAG)

Vector Databases: from Embeddings to Applications 课程地址&#xff1a;https://www.deeplearning.ai/short-courses/vector-databases-embeddings-applications/ 下面是这门课程的笔记。 使用Weaviate向量数据库&#xff1a;从Embeddings到应用&#xff0c;比如Multilin…

Material Studio 中 DMol3 计算材料吸附能

1.先导入Cif文件 2.切表面 3.沿着你要切的晶面切 4.扩胞 5.加真空层&#xff08;一般加10埃&#xff09; 现在就是这样的了 6.然后对其结构优化&#xff08;高斯几何优化&#xff09; 7.再在体系上加原子或者想要的材料 8.Outmal文件中最后的Ef就是整个体系的能量&#xff0…

代码随想录算法训练营第24天|77. 组合

77.组合 思路:如果暴力解,需要几个数则需要相应的for循环个数。 回溯法:把数的组合抽象成一颗树,利用递归的思想进行回溯,递归必有回溯。每次遍历到叶子节点,则存入结果。 代码&#xff1a; vector<vector<int>> result;//存放结果vector<int> path;//存放…

猜数字游戏(C语言)

一&#xff1a;游戏要求 1.电脑自动生成1~100随机数字 2.玩家猜数字&#xff0c;在猜数字过程中&#xff0c;根据猜数字的大小&#xff0c;根据猜数据的大小&#xff0c;给出大了还是小了的反馈&#xff0c;直到猜对游戏 二&#xff1a;随机数的生成 要完成猜数字游戏&…

Chroma向量数据库使用案例

​​​​​基于ChromaDB与BGEToward-VectorModel的本地私有化向量检索之路 安装基础环境 包括Python安装、pip安装及镜像设置等网上提供很多资料,这里就不介绍了。 安装chromaDB环境安装pip install chromadb 安装pdf解析库pip install pdfminer.six 安装模型库pip install …

vue3项目打包上线后,如何配置api接口地址,省去更换api再次打包

vue3项目打包上线后,如何配置api接口地址,省去更换api再次打包 一、项目根目录下public文件夹创建static>config.js文件 window.webConfig {//动态配置api(用于上线后更改api)webApiBaseUrl: xxx,//基础接口地址 }二、项目根目录下public文件夹index.html页面 <script s…

代码随想录算法训练营第33天—动态规划01 | ● 理论基础 ● 509. 斐波那契数 ● *70. 爬楼梯 ● *746. 使用最小花费爬楼梯

动态规划理论基础 https://programmercarl.com/%E5%8A%A8%E6%80%81%E8%A7%84%E5%88%92%E7%90%86%E8%AE%BA%E5%9F%BA%E7%A1%80.html 视频&#xff1a;https://www.bilibili.com/video/BV13Q4y197Wg 主要题型 动规基础题 斐波那契数列&#xff08;爬楼梯&#xff09; 背包问题打…

Java中super关键字作用及解析

在 Java 中&#xff0c;super关键字主要有以下作用&#xff1a; 在子类构造方法中调用父类的构造方法&#xff1a;使用super关键字可以在子类的构造方法中显式调用父类的构造方法&#xff0c;以便继承父类的属性和行为。语法如下&#xff1a;这样可以确保父类的构造方法被正确…

回收站选址(CCF 201912-2)解题思路

分析 把x,y坐标拼接成一个字符串&#xff08;x,y&#xff09;作为Set的key&#xff0c;保存到Set中&#xff0c;遍历Set&#xff0c;取出坐标&#xff0c;然后判断上下左右四个点是否在Set中&#xff0c;如果在&#xff0c;进而判断&#xff0c;四个角是否在Set中&#xff0c;…

【操作系统学习笔记】文件管理1.6

【操作系统学习笔记】文件管理1.6 参考书籍: 王道考研 视频地址: Bilibili 文件存储空间管理 存储空间的划分与初始化 安装 Windows 操作系统的时候&#xff0c;一个必经步骤是磁盘分区。每个区分为目录区&#xff08;存放文件目录信息 FCB、用于磁盘存储空间管理的信息&am…

算法题 — 三个数的最大乘机

三个数的最大乘机 整型数组 nums&#xff0c;在数组中找出由三个数字组成的最大乘机&#xff0c;并输出这个乘积。&#xff08;乘积不会越界&#xff09; 重点考察&#xff1a;线性扫描 排序法&#xff1a; public static void main(String[] args) {System.out.println(so…

万字详解,Java实现低配版线程池

文章目录 1.什么是线程池2.线程池的优势3.原理4.代码编写4.1 阻塞队列4.2 ThreadPool线程池4.3 Worker工作线程4.4 代码测试 5. 拒绝策略5.1 抽象Reject接口5.2 BlockingQueue新增tryPut方法5.3 修改ThreadPool的execute方法5.4 ThreadPool线程池构造函数修改5.5 拒绝策略实现1…

YoloV8改进策略:Block改进|自研Block,涨点超猛

参考模型 参考的Block,如下图: 我对Block做了修改,修改后的结构图如下: 代码详解 from timm.models.layers import DropPathfrom torch import Tensor def channel_shuffle(x: Tensor, groups: int