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;高…

基于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…

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…

使用芯片为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

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;以防有小…

如何评价2023年亚太杯数学建模竞赛?

APMCM亚太数学建模大赛的含金量在数学建模比赛中虽然不是最高水平&#xff0c;但是也属于比较高的水平了&#xff0c;值得参加试一试。 比如本次C题&#xff0c; 问题一&#xff1a;研究分析影响中国新能源汽车发展的主要因素&#xff0c;建立数学模型&#xff0c;描述这些因…

[14] CUDA_使用Opencv处理图像

CUDA_使用Opencv处理图像 1. Opencv中的图像表示 Opencv 提供了Mat 类来存储图像&#xff0c;如下&#xff1a; cv::Mat img; imgcv::imread("cameraman.tif);定义图像的示例&#xff1a; //定义单通道图像 cv::Mat img(6,6,CV_8UC1); //32位浮点型 Mat img2(256,256,…

sharePoint-基于sharepoint列表中的其他列值自动更新值列

首先进入网站&#xff0c;点击网站内容 点击想要操作的数据表后面的按钮&#xff0c;点击设置 点击创建栏 填写栏名&#xff0c;类型选择计算值&#xff0c;公式用于对列表或库中的值执行计算&#xff0c;然后点击右下角的确定就添加成功了 公式参考&#xff1a; 公式SharePoi…

Windows系统下制作Windows 11系统U盘启动及安装指导

Windows系统下制作Windows 11系统U盘启动及安装指导 一、准备工作 U盘不得小于8G(推荐使用usb3.0接口)&#xff1b;下载好对应的系统镜像&#xff1b;下载RUFUS或者软通碟U盘制作启动软件&#xff1b; 二、Windows操作系统下制作U盘启动&#xff08;这里以使用RUFUS软件为例&…

Chromium 开发指南2024 Mac篇-安装和配置depot_tools工具(三)

1.引言 在前两篇指南中&#xff0c;我们详细介绍了在 macOS 环境下编译 Chromium 所需的硬件要求和系统依赖&#xff0c;并具体讲解了如何正确安装和配置 Xcode。通过这些步骤&#xff0c;您已经为编译 Chromium 打下了坚实的基础。然而&#xff0c;编译 Chromium 还需要配置一…

电路分析期末总结笔记上

电流&#xff0c;电压定义及单位 电流&#xff08;Current&#xff09; 的定义是单位时间内通过导体横截面的电荷量。 电压&#xff08;Voltage&#xff09;&#xff0c;又称作电势差或电位差&#xff0c;是衡量单位电荷在静电场中由于电势不同而产生的能量差的物理量。 参考…

如何将Postman API测试转换为JMeter以进行扩展

2024软件测试面试刷题&#xff0c;这个小程序&#xff08;永久刷题&#xff09;&#xff0c;靠它快速找到工作了&#xff01;&#xff08;刷题APP的天花板&#xff09;-CSDN博客跳槽涨薪的朋友们有福了&#xff0c;今天给大家推荐一个软件测试面试的刷题小程序。​编辑https://…