c++实现二叉搜索树(下)

 好久不见啊,baby们,小吉我又回归了,发完这一篇小吉将会有两周时间不会更新blog了(sorry),在小吉没有发blog的日子里大家也要好好学习数据结构与算法哦,还有就是别忘了小吉我❤️
 这篇博客是二叉搜索树系列的最后一篇了,(提前预告一下)难度也相对于前几篇来说比较简单(前提是前几篇的知识大家都熟练掌握了)。让小吉没想到的是二叉搜索树这么受大家喜欢,阅读点赞收藏关注达到历史新高了(哇🎉🎉🎉),小吉在这里十分感谢大家的喜欢和支持(爱你们哦😘)
 好了,又说了这么多的废话,现在我们进入正题

二叉搜索树(范围查询)实现大纲
myless——找小于key(键值)的所有实值
mygreater——找大于key(键值)的所有实值
mybetween——找>=key1且<=key2的所有实值

myless——找<key的所有实值

思路:二叉搜索树使用中序遍历(左值右)的得到的遍历结果是升序的。对二叉搜索树采用中序遍历,当遍历的节点key小于传入的key时,将节点的实值加入到数组中;如果大于,直接结束中序遍历,最后再返回数组

如果有小可爱有点忘记中序遍历了,可以去看小吉的数据结构与算法(c++实现)专栏,里面有一篇讲前中后序遍历的,博客传送门🚪:二叉树遍历之深度优先遍历
二叉搜索树
代码实现👇:

vector<string> BSTTree::myless(int key)
{vector<string> v;BSTnode* curr = _root;stack<BSTnode*> s;while (curr != nullptr || !s.empty()){if (curr != nullptr){s.push(curr);curr = curr->_left;}else{BSTnode* topval = s.top();if (topval->_key < key){v.push_back(topval->_value);}else{break;}s.pop();curr = topval->_right;}}return v;
}

mygreater——找>key的所有实值

思路:和myless思路大致相同,采用中序遍历,当节点的key>传入的key时,将节点的实值加入到数组中,中序遍历结束返回数组

代码实现👇:

vector<string> BSTTree::mygreater(int key)
{vector<string> v;BSTnode* curr = _root;stack<BSTnode*> s;while (curr != nullptr || !s.empty()){if (curr != nullptr){s.push(curr);curr = curr->_left;}else{BSTnode* topval = s.top();if (topval->_key > key){v.push_back(topval->_value);}s.pop();curr = topval->_right;}}return v;
}

通过代码我们发现采用中序遍历查找>key的所有实值的效率并不高,要遍历完整个二叉搜索树,以实现myless为借鉴,我们可以采用反向中序遍历(右值左),这样当节点key大于传入的key,将节点的实值加入到数组中;当小于时,直接结束遍历,返回数组

代码实现👇:

vector<string> BSTTree::mygreater2(int key)
{vector<string> v;BSTnode* curr = _root;stack<BSTnode*> s;while (curr != nullptr || !s.empty()){if (curr != nullptr){s.push(curr);curr = curr->_right;//右}else{BSTnode* topval = s.top();//值if (topval->_key > key){v.push_back(topval->_value);}else{break;}s.pop();curr = topval->_left;//左}}return v;
}

mybetween——找>=key1且<=key2的所有实值

思路:就是找在一个区间的实值,还是采用中序遍历,就不细说了,和前面两种的实现思路非常相似,这个可以说是前面的结合

代码实现👇:

vector<string> BSTTree::mybetween(int key1, int key2)
{vector<string> v;BSTnode* curr = _root;stack<BSTnode*> s;while (curr != nullptr || !s.empty()){if (curr != nullptr){s.push(curr);curr = curr->_left;}else{BSTnode* topval = s.top();if (topval->_key >= key1&&topval->_key <= key2){v.push_back(topval->_value);}else if (topval->_key > key2){break;}s.pop();curr = topval->_right;}}return v;
}

 到这里二叉搜索树的所有方法都已经实现了🎉🎉🎉,有没有宝子们觉得意犹未尽啊,下面小吉就推荐几道和二叉搜索树相关的力扣题

二叉搜索树力扣题推荐

🟦删除二叉搜索树中的节点
🟦二叉搜索树中的插入操作
🟦二叉搜索树中的搜索
🟦验证二叉搜索树
🟦二叉搜索树的范围和
🟦前序遍历构造二叉搜索树
🟦二叉搜索树的最近公共祖先
以上👆就是小吉推荐的题,这些题小吉都做过,感觉还是挺不错的,大家可以没事去做做,巩固所学的知识💪
 学习的时间总是短暂的,这篇blog到这里就已经全部结束了,大家课后一定要多敲敲代码,只有敲过代码才能发现问题🧐
 创作不易,还望各位多多支持,不要忘了点赞收藏关注小吉我🌹
最后,小吉的博客能得到大家的喜欢,小吉感觉很开心,十分感谢大家的支持和喜欢🤗

如有错,还望各位大佬多多指点🌹🌹🌹

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

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

相关文章

充电学习—7、BC1.2 PD协议

BC1.2&#xff08;battery charging&#xff09;充电端口识别机制&#xff1a; SDP、CDP、DCP 1、VBUS detect&#xff1a;vbus检测 PD&#xff08;portable device&#xff0c;便携式设备&#xff09;中有个检测VBUS是否有效的电路&#xff0c;电路有个参考值&#xff0c;高…

NumPy 双曲函数与集合操作详解

NumPy 双曲函数 NumPy 提供了 sinh()、cosh() 和 tanh() 等 ufunc&#xff0c;它们接受弧度值并生成相应的双曲正弦、双曲余弦和双曲正切值。 示例&#xff1a; import numpy as npx np.sinh(np.pi/2)print(x)示例 找到数组 arr 中所有值的双曲余弦值&#xff1a; import…

基于CNN的掩码自编码器微调用于分类任务

开源仓库 JJLi0427/CNN_Masked_Autoencoder: Design a patches masked autoencoder by CNN (github.com)https://github.com/JJLi0427/CNN_Masked_Autoencoder CNN自编码器 前面的文章中我们模仿MAE的思路用CNN做了一个掩码自编码器 动手小实验&#xff0c;用CNN来构建Mase…

python学习笔记-07

python内置函数 内置函数就是python自带的函数&#xff0c;不需要我们再去定义的&#xff0c;如print等直接使用即可&#xff0c;内置函数官方文档&#xff1a;官链。 1.数学运算 #数学运算&#xff1a; print(------abs()是绝对值函数------) a-1.1 print({}的绝对值是{}.fo…

MongoDB 正则表达式

MongoDB 正则表达式 MongoDB 是一个流行的 NoSQL 数据库&#xff0c;它提供了强大的查询功能&#xff0c;包括对正则表达式的支持。正则表达式是一种强大的文本搜索工具&#xff0c;它允许用户根据特定的模式匹配和搜索字符串。在 MongoDB 中&#xff0c;正则表达式可以用于查…

异常处理总结

自定义异常 ​ 系统中的异常可以分为我们能预知的异常和未知的系统异常&#xff0c;对于我们能预知的异常如空值判断&#xff0c;用户名错误&#xff0c;密码错误等异常我们需要返回客户端&#xff0c;对于系统内部异常如SQL语法错误&#xff0c;参数格式转换错误等需要统一包…

MySQL之复制(三)

复制 从另一个服务器开始复制 前面的设置都是嘉定主备库均为刚刚安装好且都是默认的数据&#xff0c;也就是说两台服务器上数据相同&#xff0c;并且知道当前主库的二进制日志。这不是典型的案例&#xff0c;大多数情况下有一个已经运行了一段时间的主库&#xff0c;然后用一…

QT day04

一、思维导图 二、登录界面优化 代码&#xff1a; 界面&#xff1a; *{background-color: rgb(255, 255, 255); }QFrame#frame{border-image: url(:/Logo/shanChuan.jpg);border-radius:15px; }#frame_2{background-color: rgba(110, 110, 110, 120);border-radius:15px; }Q…

redis-大key及影响

一、什么是大key Redis大Key其实并不是字面意思&#xff0c;不是指存储在Redis中的某个Key的大小超过一定的阈值&#xff0c;而是指该Key所对应的value过大。对于string类型来说&#xff0c;一般情况下超过10KB则认为是大Key&#xff0c;对于set&#xff0c;zset&#xff0c;h…

使用芯片为ZYNQ—7020,基于野火FPGA ZYNQ开发板

使用芯片为ZYNQ—7020&#xff0c;基于野火FPGA ZYNQ开发板 肤色模型简介 YCrCb也称为YUV&#xff0c;主要用于优化彩色视频信号的传输。与RGB视频信号传输相比&#xff0c;它最大的优点在于只需占用极少的频宽&#xff08;RGB要求三个独立的视频信号同时传输&#xff09;。其…

国内如何高速下载hugginging face模型

国内如何高速下载hugginging face模型 背景 如今开源大模型很多&#xff0c;相较于线上的调用接口&#xff0c;本地部署更有吸引力。这就免不了需要去Huggingface上下载模型&#xff0c;但因为国内管制要求&#xff0c;huggingface 并不能直接访问&#xff0c;或者下载速度很…

统计学一(术语,正态)

目录 一&#xff0c;常用术语 二&#xff0c;正态分布&#xff08;Normal Distribution&#xff09; 三&#xff0c;中心极限定理(Central Limit Theorem) 一&#xff0c;常用术语 population(族群)&#xff1a;要统计的总的 populationSize(族群数量)&#xff1a;要统计的总…

使用高斯混合模型(GMM)进行猫狗音频聚类(Kaggle Audio Cats and Dogs)

Audio Cats and Dogs | Kaggle 目录 一、实验目标 二、数据分析 三、实验结果 四、改进方向 一、实验目标 数据集包括164个标注为猫的.wav文件&#xff0c;总共1323秒和113个标注为狗叫声的.wav文件&#xff0c;总共598秒&#xff0c;要求判别每个音频是狗叫还是猫叫 二、…

反激开关电源保险丝以及热敏电阻的选型

保险丝&#xff08;2A/250V&#xff09; 保险丝的选型及计算 1、保险丝的作用就是在电路出现故障造成过流甚至短路时能及时切断电路电源的联系。&#xff08; 保护后 级电路&#xff0c;一旦出现故障&#xff0c;由于电流过大温度过高&#xff0c;保险丝熔断 &#xff09; 2、…

6月18日 Qtday4

作业day4.1 作业4.2

第1天:Python简介与环境设置

学习目标 了解Python的基本概念和特点安装Python并配置开发环境理解Python的基本语法 学习内容 1. 了解Python Python是一种高级编程语言&#xff0c;以其简洁、易读和强大的功能而闻名。它支持多种编程范式&#xff0c;包括面向对象、过程式和函数式编程。 主要特点&…

ros1转ros2的注意事项

在将ROS 1迁移到ROS 2的过程中&#xff0c;有几个重要的注意事项需要考虑&#xff1a; 1. **先决条件**&#xff1a;在迁移之前&#xff0c;确保ROS 1包的所有依赖项在ROS 2中都是可用的。 2. **包规范格式**&#xff1a;ROS 2不支持ROS 1的包规范格式1&#xff0c;只支持较新…

SpringBoot快速入门-上

Apache Tomcat Apache Tomcat是一个开源的Servlet 或 web容器&#xff0c;它实现了Java Servlet、JavaServer Pages (JSP)、Java Unified Expression Language (JUEL) 和 Java WebSocket 规范。 使用 官网下载 安装:绿色版 , 直接解压 卸载:直接删除目录 改编码: # conf/l…

多路h265监控录放开发-(1)建立head窗口并实现鼠标拖动整个窗口

头文件&#xff1a; //鼠标事件 用于拖动窗口//一下三个函数都是QWidget的可重载成员函数void mouseMoveEvent(QMouseEvent* ev) override;void mousePressEvent(QMouseEvent* ev) override;void mouseReleaseEvent(QMouseEvent* ev) override; 源文件&#xff1a; / /// 鼠标…

玩了两年黑苹果+两年MBP,macOS究竟好在哪?

注&#xff1a;本文仅为个人观点&#xff0c;仅供参考。 前言 今天比较无聊&#xff0c;小白突然盘点了一下自己使用macOS系统的点点滴滴&#xff0c;这也算是一个闲聊帖子吧。 首先&#xff0c;本帖子无任何广告行为&#xff0c;纯属唠嗑文。 声明一下&#xff0c;以防有小…