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到这里就已经全部结束了,大家课后一定要多敲敲代码,只有敲过代码才能发现问题🧐
 创作不易,还望各位多多支持,不要忘了点赞收藏关注小吉我🌹
最后,小吉的博客能得到大家的喜欢,小吉感觉很开心,十分感谢大家的支持和喜欢🤗

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

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

MySQL从5.7升级到8.0步骤及其问题

MySQL从5.7升级到8.0步骤及其问题 前言 本文源自微博客&#xff0c;且以获得授权&#xff0c;请尊重版权。 一、需求背景 Docker环境下&#xff0c;MySQL5.7升级到8.0&#xff0c;数据迁移时使用的是mysqldump方式迁移。 二、迁移步骤 数据备份&#xff1a; docker exec -i 1…

pygame游戏开发

Pygame游戏开发 pygame简介 模块库请参考&#xff1a;pygame官方文档 pygame可以用作游戏开发&#xff0c;但在商业游戏中真正的开发工具却不是pygame。使用pygame开发游戏周期长。 安装pygame 在pycharm中安装第三方库pygame&#xff1a; 在计算机中安装pygame&#xf…

AI虚拟数字人上线需要办理哪些资质?

近年来&#xff0c;随着AI 技术快速发展&#xff0c;虚拟数字人行业也进入了新的发展阶段。AI 技术可覆盖虚拟数字人的建模、视频生成、驱动等全流程&#xff0c;一方面使虚拟数字人的制作成本降低、制作周期缩短&#xff0c;另一方面&#xff0c;多模态 AI 技术使得虚拟数字人…

【RK3588/算能/Nvidia智能盒子】AI“值守”,规范新能源汽车充电站停车、烟火及充电乱象

近年来&#xff0c;中国新能源汽车高速发展&#xff0c;产量连续8年位居全球第一。根据中国充电联盟数据&#xff0c;截至2023年6月&#xff0c;新能源汽车保有量1620万辆&#xff0c;全国充电基础设施累计数量为665.2万台&#xff0c;车桩比约2.5:1。 虽然新能源汽车与充电桩供…

短视频矩阵系统:高效运营,解决多账号管理难题

前言 在当下短视频风靡的时代&#xff0c;如何高效管理和运营多个短视频账号&#xff0c;成为了众多运营者面临的挑战。而今&#xff0c;一款全新的短视频矩阵系统应运而生&#xff0c;它不仅融合了AI文案生成与剪辑模式等先进功能&#xff0c;更支持多平台授权&#xff0c;助…

小阿轩yx-Nginx 优化与防盗链

小阿轩yx-Nginx 优化与防盗链 Nginx 服务优化 在企业应用环境中&#xff0c;服务器的安全性和响应速度需要根据实际情况进行相应参数配置&#xff0c;以达到最优的用户体验。 Nginx默认的安装参数 只能提供最基本的服务 需要调整 网页缓存时间连接超时网页压缩等相应参数…

【记录44】【案例】echarts地图

效果&#xff1a;直接上效果图 环境&#xff1a;vue、echarts4.1.0 源码 // 创建容器 <template><div id"center"></div> </template>//设置容器大小&#xff0c;#center { width: 100%; height: 60vh; }这里需注意&#xff1a;笔者在echar…

如何轻松进行照片压缩?5个软件帮助你快速进行照片压缩

如何轻松进行照片压缩&#xff1f;5个软件帮助你快速进行照片压缩 照片压缩是一种常见的图像处理操作&#xff0c;旨在减小图像文件的大小而尽量保持图像质量。有许多软件和工具可供选择&#xff0c;每个工具都有其独特的压缩算法和功能。以下是一些关于照片压缩的详细信息&am…

微信小程序毕业设计-小区疫情防控系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

Python 数据可视化 散点图

Python 数据可视化 散点图 import matplotlib.pyplot as plt import numpy as npdef plot_scatter(ref_info_dict, test_info_dict):# 绘制散点图&#xff0c;ref横&#xff0c;test纵plt.figure(figsize(80, 48))n 0# scatter_header_list [peak_insert_size, median_insert…

多模态大模型通用模式

MM-LLMs&#xff08;多模态大模型&#xff09;是目前比较新的和实用价值越发显著的方向。其指的是基于LLM的模型&#xff0c;具有接收、推理和输出多模态信息的能力。这里主要指图文的多模态。 代表模型&#xff1a;GPT-4o、Gemini-1.5-Pro、GPT-4v、Qwen-VL、CogVLM2、GLM4V、…

JCR一区 | Matlab实现GAF-PCNN、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断

JJCR一区 | Matlab实现GAF-PCNN、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断 目录 JJCR一区 | Matlab实现GAF-PCNN、GASF-CNN、GADF-CNN的多特征输入数据分类预测/故障诊断分类效果格拉姆矩阵图GAF-PCNNGASF-CNNGADF-CNN 基本介绍程序设计参考资料 分类效果 格拉姆…

java架构设计-COLA

参考&#xff1a;https://github.com/alibaba/COLA 架构 要素&#xff1a;组成架构的重要元素 结构&#xff1a;要素直接的关系 意义&#xff1a;定义良好的结构&#xff0c;治理应用复杂度&#xff0c;降低系统熵值&#xff0c;改善混乱状态 创建COLA应用&#xff1a; mvn …

Centos8.5安装mysql8.0

1.检查是否有安装mysql数据库&#xff08;如果有mysql或者mariadb数据库&#xff0c;则卸载&#xff09; [rootmyhost ~]# rpm -qa |grep mysql [rootmyhost ~]# rpm -qa | grep mariadb [rootmyhost ~]# ll /etc/my.cnf ls: 无法访问/etc/my.cnf: No such file or directory…

猫头虎分享已解决Bug || 前端领域技术问题解析

原创作者&#xff1a; 猫头虎 作者微信号&#xff1a; Libin9iOak 作者公众号&#xff1a; 猫头虎技术团队 更新日期&#xff1a; 2024年6月6日 博主猫头虎的技术世界 &#x1f31f; 欢迎来到猫头虎的博客 — 探索技术的无限可能&#xff01; 专栏链接&#xff1a; &…

python中scrapy

安装环境 pip install scrapy 发现Twisted版本不匹配 卸载pip uninstall Twisted 安装 pip install Twisted22.10.0 新建scrapy项目 scrapy startproject 项目名 注意&#xff1a;项目名称不允许使用数字开头&#xff0c;也不能包含中文 eg: scrapy startproject scrapy_baidu_…

Redis数据结构学习

Redis 关于redis相关的技术文章我一直没什么思路 直到最近的端午节,我偶然和一个程序员朋友聊到了关于redis数据结构相关的知识点, 所以我决定写一篇文章记录一下 首先我们需要知道redis支持哪些数据类型 Strings (字符串)Lists(列表)Hashes(哈希)Sets(集合)Sorted Sets(有序…

Transformer模型:未来的改进方向与潜在影响

Transformer模型&#xff1a;未来的改进方向与潜在影响 自从2017年Google的研究者们首次提出Transformer模型以来&#xff0c;它已经彻底改变了自然语言处理&#xff08;NLP&#xff09;领域的面貌。Transformer的核心优势在于其“自注意力&#xff08;Self-Attention&#xf…

【C语言习题】31.冒泡排序

文章目录 作业标题作业内容2.解题思路3.具体代码 作业标题 冒泡排序 作业内容 实现一个对整形数组的冒泡排序 2.解题思路 先了解一下冒泡排序&#xff1a; 两两相邻的元素进行比较&#xff0c;如果前面元素大于后面元素就交换两个元素的位置&#xff0c;最终的结果是最大的…

RERCS系统开发实战案例-Part08 FPM 应用程序的表单组件(From UIBB)与列表组件(List UIBB)组合的创建

1、新建From UIBB的FPM Application的快速启动面板 备注&#xff1a;该步骤可第一步操作&#xff0c;也可最后一步操作&#xff0c;本人习惯第一步操作。 1&#xff09;使用事务码 LPD_CUST&#xff0c;选择对应的角色与实例进入快速启动板定制页面&#xff1b; 2&#xff09…