C++ BinarySercahTree recursion version

news2024/11/14 13:44:05

for循环版本的:C++ BinarySercahTree for version-CSDN博客

Inorder()在c++ BinarySerschTree for verison写了。

还是按照那种嵌套的方式来写递归。

现在来写查找

FindR()

bool FindR()
	{
		return _FindR(_root);
	}
		
	

然后_FindR()函数写递归具体实现:

假设要找13,就让13和root比,key大root就往右,key小就往左,找到空就不找了,找到了

bool _FindR(Node* root,const K& key)
	{
while(cur)
{
		Node* cur = root;
		if (root == nullptr)return false;
		if (key > cur->_key) return _FindR(cur->_right, key);
		else if (key < cur->_key) return _FindR(cur->_left, key);
		return true;
}

	}

假设要找12,那找到空都找不到,那就返回false

bool _FindR(Node* root,const K& key)
{
      while (cur)
	{
         Node* cur = root;
		if (root == nullptr)return false;
		if (key > cur->_key) return _FindR(cur->_right, key);
		else if (key < cur->_key) return _FindR(cur->_left, key);
		return true;


		return  true

	}
		return false;

	}

InsertR()

	bool InsertR()
	{
		return _Insert(root,key);


	}
	bool _InsertR(Node* _root,const  K& key)
	{
			if (key > root->_key) return _InsertR(root->_right, key);
			else if (key < root->_key) return _InsertR(root->_left, key);
			else return false;//相等不让插入
	}

push

在root为空的时候插入

	if (root == nullptr) { root = new Node(key); return true; }

链接

还可以用快慢指针的方式链接。

也可以用下面这种方式:引用

bool _InsertR(Node*& _root,const  K& key)

画图解析:

要插入9,root最后会走到空节点:

root又是一个引用,是10节点的别名:

 root = new Node(key);

把key值给给root就是给root->letf

这样就链起来了:

 

测试:

EraserR

基本架构

	bool EraserR(const K& key)
	{
		return   _EraserR(_root, key);
	}
		

	bool _EraserR(Node* root,const K& key)
	{

		if (root == nullptr) return false;
		if (key > root->_key) return _EraserR(root->_right, key);
		else if (key < root->_key) return _EraserR(root->_left, key);
		else
		{
			//否则就是找到了
			//开始删除

		}
	}

下面有3种情况要处理

左为空,右为空,左右都不为空

先看左为空的情况:

假设我们要删除10,10比8小,root往右走,走到10,找到了,root->left==nullptr

然后删除10,再把8和14链起来

bool _EraserR(Node*& root,const K& key)
	{

		if (root == nullptr) return false;
		if (key > root->_key) return _EraserR(root->_right, key);
		else if (key < root->_key) return _EraserR(root->_left, key);
		else
		{
			//否则就是找到了
			//开始删除
			Node* del = root;
			if (root->_left == nullptr)root= root->_right;
			delete del;

		}
	}

这里仍然用到了引用:

&root=root->right

例如10是8的别名:

然后 root= root->_right;

root是root->right的别名,也就是10,10的right是14,把14给给8:

把3给给1,就是把14给给8,就把8和14链起来了。

再把10给删掉:

 右边为空也一样:

if (root->_right == nullptr)
			{
				root = root->_left;
				delete del;
			}

如果要删除的节点为root,比如要删除8:

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

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

相关文章

HAL库 CubeMX STM32采用SDIO实现对SD卡和NAND Flash的读写

目录 一、选择合适的存储芯片。 可以去雷龙官网白嫖&#xff0c;白嫖链接&#xff1a;免费样品 二、SD卡/SD NAND底层原理 三、 CubeMX配置STM32具体步骤 1、时钟和系统配置 2、配置SDIO 3、配置DMA &#xff08;可选&#xff09; 4、设置串口 四、代码编写 1、公共…

vue 数据劫持代理原理

function lianxi(){// vue 数据劫持代理let data {username:curry,age:33}//模拟组件的实例let _this {}//利用Object.defineProperty()for( let item in data){//console.log(item,data[item])Object.defineProperty(_this,item,{//get:用来获取扩展属性值的,当获取该属性值…

基本指令(2):通配符,重定向,命令行管道

一、通配符 rm -rf ./* # * —— 通配符&#xff0c;指定路径下的所有文件&#xff08;不包括隐藏文件&#xff09;二、重定向 在理解重定向前&#xff0c;先要有一个概念&#xff1a;Linux下一切皆文件&#xff0c;大部分硬件设备都可以看做有读写方法&#xff0c;只不过有些方…

Web前端免费接入Microsoft Azure AI文本翻译,享每月2百万个字符的翻译

Azure 文本翻译是 Azure AI 翻译服务的一项基于云的 REST API 功能。 文本翻译 API 支持实时快速准确地进行源到目标文本翻译。 文本翻译软件开发工具包 (SDK) 是一组库和工具&#xff0c;可用于轻松地将文本翻译 REST API 功能集成到应用程序中。 文本翻译 SDK 可跨 C#/.NET、…

国腾GM8775C完全替代CS5518 MIPIDSI转2 PORT LVDS

集睿致远CS5518描述&#xff1a; CS5518是一款MIPI DSI输入、LVDS输出转换芯片。MIPI DSI 支持多达4个局域网&#xff0c;每条通道以最 大 1Gbps 的速度运行。LVDS支持18位或24位像素&#xff0c;25Mhz至154Mhz&#xff0c;采用VESA或JEIDA格 式。它只能使用单个1.8v电源&am…

人脸活体检测:Domain-Generalized Face Anti-Spoofing with Unknown Attacks

论文作者&#xff1a;Zong-Wei Hong,Yu-Chen Lin,Hsuan-Tung Liu,Yi-Ren Yeh,Chu-Song Chen 作者单位&#xff1a;National Taiwan University; E.SUN Financial Holding Co., Ltd.; National Kaohsiung Normal University 论文链接&#xff1a;http://arxiv.org/abs/2310.11…

Echarts多曲线数值与Y周刻度不符合

发现问题&#xff1a; 在展示多曲线图表的时候&#xff0c;发现图表曲线数值相差不大&#xff0c;但是图表展示的曲线相差很大&#xff0c;仔细观察之后发现是展示有问题(其实这并不能算是错误&#xff0c;只是由于忽略&#xff0c;导致的配置与预期不符合)。 问题复现&#x…

【低代码平台】JeecgBoot代码生成器如何使用?Online代码生成

Online代码生成 目前Vue3已经支持两种模式&#xff1a;Online在线模式 和 GUI模式代码生成。 JeecgBoot版本要求&#xff1a; 3.2.0 ( 提供了vue3、vue3Native模板目录 ) 第一步&#xff1a;通过online表单在线建表 jeecg提供了在线建表的功能&#xff0c;找到菜单&#xff1a;…

关于城市综合管廊分析与应用

安科瑞 华楠 摘要&#xff1a;文章介绍了城市综合管廊的概念和我国综合管廊建设的背景&#xff0c;并总结归纳了综合管廊的设计要点以及注意事项&#xff0c;为今后的综合管廊设计提供参考。 关键词&#xff1a;城市&#xff1b;综合管廊&#xff1b;应用 1 规划背景及技术路…

GEE案例——一个完整的火灾监测案例dNBR差异化归一化烧毁指数

差异化归一化烧毁指数 dNBR是"差异化归一化烧毁指数"的缩写。它是一种用于评估卫星图像中烧毁区域严重程度的遥感指数。dNBR值通过将火灾前的归一化烧毁指数(NBR)减去火灾后的NBR来计算得出。该指数常用于野火监测和评估。 dNBR(差异化归一化烧毁指数)是一种用…

报错:Could not resolve host: mirrorlist.centos.org;Unknown error

报错&#xff1a;Could not resolve host: mirrorlist.centos.org;Unknown error 一般是因为网络配置错误导致无法连接外网&#xff0c;我们先尝试ping一下www.baidu.com发现无法ping通。 果然&#xff0c;接下来我们就开始排查吧&#xff01;&#xff01; 1.网络配置查看 打开…

LeetCode88——合并两个有序数组

LeetCode88——合并两个有序数组 1.题目描述&#xff1a; 给你两个按 非递减顺序 排列的整数数组 nums1 和 nums2&#xff0c;另有两个整数 m 和 n &#xff0c;分别表示 nums1 和 nums2 中的元素数目。 请你 合并 nums2 到 nums1 中&#xff0c;使合并后的数组同样按 非递减…

SylixOS BSP开发(八)

初始化FPU、MMU和Cache组件 本来想在不初始化这些部件的情况下把SylixOS先启动起来感受下&#xff0c;结果测试发现如果MMU不使能的话&#xff0c;系统启动过程中线程无法进行调度emm。。。所以只好把这一章节提前来讲了。这三个组件的初始化都是在bspInit.c中进行的。 1. FPU初…

从零开始做一个SDWAN

VPN和SD-WAN的区别 VPN&#xff08;Virtual Private Network&#xff09;和SD-WAN&#xff08;Software-Defined Wide Area Network&#xff09;是两种不同的网络技术&#xff0c;它们在目的、功能和实施方式上有一些重要的区别。 目的和应用场景: VPN&#xff1a;VPN主要用于…

做图标设计一些常用的设计规范分享

应用程序图标设计是将某个概念转换为清晰易读的图形&#xff0c;从而降低用户的理解成本&#xff0c;提高界面的美感。在我们的企业级应用设计范围内&#xff0c;应用图标在界面设计的许多元素中往往只占很小的比例&#xff0c;调用时会缩小到比设计稿小很多倍的尺寸。此外&…

kafka3.X集群安装(不使用zookeeper)

参考: 【kafka专栏】不用zookeeper怎么安装kafka集群-最新kafka3.0版本 一、kafka集群实例角色规划 在本专栏的之前的一篇文章《kafka3种zk的替代方案》已经为大家介绍过在kafka3.0种已经可以将zookeeper去掉。 上图中黑色代表broker&#xff08;消息代理服务&#xff09;&…

DLT645转modbus协议网关采集电表的数据方法

DLT645有两个版本分别是DLT645-97和DLT645-07&#xff0c;该协议主要用于电表抄表&#xff0c;采用为主-从结构的半双工通讯模式&#xff0c;硬件接口使用RS-485今天我们来看下&#xff0c;用远创智控YC-645-TCP网关如何采集电表的数据 1&#xff0c;首先&#xff0c;我们需要…

淘宝京东抖音1688苏宁等关键词搜索商品API接口(关键词搜索商品API接口,关键词搜索商品列表接口)

淘宝京东抖音1688苏宁等关键词搜索商品API接口&#xff08;关键词搜索商品API接口&#xff0c;关键词搜索商品列表接口&#xff09;代码对接如下&#xff1a; item_search-按关键字搜索淘宝商品 taobao.item_search 1.公共参数 名称类型必须描述keyString是调用key&#xf…

UG\NX二次开发 获取面的面面积、周长

文章作者:里海 来源网站:王牌飞行员_里海_里海NX二次开发3000例,里海BlockUI专栏,C\C++-CSDN博客 感谢粉丝订阅 感谢 weixin_38891498 订阅本专栏,非常感谢。 简介 UG\NX二次开发 获取面的面面积、周长 效果 代码 #include "me.hpp" #include <NXOpen/Session…

docker部署prometheus+grafana服务器监控(二) - 安装数据收集器 node-exporter

在目标服务器安装数据收集器 node-exporter 1. 安装数据收集器 node-exporter wget https://github.com/prometheus/node_exporter/releases/download/v1.6.1/node_exporter-1.6.1.linux-amd64.tar.gztar xvf node_exporter-1.6.1.linux-amd64.tar.gzmv node_exporter-1.6.1…