当前位置: 首页 > news >正文

C++ BinarySercahTree recursion version

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:

相关文章:

C++ BinarySercahTree recursion version

for循环版本的&#xff1a;C BinarySercahTree for version-CSDN博客 Inorder()在c BinarySerschTree for verison写了。 还是按照那种嵌套的方式来写递归。 现在来写查找 FindR() bool FindR(){return _FindR(_root);}然后_FindR()函数写递归具体实现&#xff1a; 假设要…...

兑换码生成与解析-个人笔记(java)

1.需求分析 兑换码长度为10字符&#xff0c;包含24个大写字母和8个数字。兑换码需要保证唯一性&#xff0c;不可重复兑换。需要防止猜测和爆刷攻击。兑换码生成和验证的算法需要高效&#xff0c;避免对数据库带来较大的压力。 导航 1.需求分析2.实现方案3.加密过程4.解密过程5…...

2023/10/25MySQL学习

外键约束 在子表添加外键后,不能在主表删除或更新记录,因为存在外键关联 删除外键,注意外键名称时我们添加外键时起的名称 使用cascade操作后,可以操作主表数据,并且子表的外键也会对应改变 set null的话,删除主表对应主键信息后,子表对应外键信息变为空 多表关系 创建中间表 可…...

网络协议--Ping程序

7.1 引言 “ping”这个名字源于声纳定位操作。Ping程序由Mike Muuss编写&#xff0c;目的是为了测试另一台主机是否可达。该程序发送一份ICMP回显请求报文给主机&#xff0c;并等待返回ICMP回显应答&#xff08;图6-3列出了所有的ICMP报文类型&#xff09;。 一般来说&#x…...

如何在 Azure 容器应用程序上部署具有 Elastic Observability 的 Hello World Web 应用程序

作者&#xff1a;Jonathan Simon Elastic Observability 是提供对正在运行的 Web 应用程序的可见性的最佳工具。 Microsoft Azure 容器应用程序是一个完全托管的环境&#xff0c;使你能够在无服务器平台上运行容器化应用程序&#xff0c;以便你的应用程序可以扩展和缩减。 这使…...

JAVA排序

再看各种排序前我们先了解一下什么叫 稳定性 比如一组数据arr[i]下标与arr[j下标]相等,arr[i]在前面,arr[j]在arr[i]后面,排序后这两个数据仍然是arr[i]在arr[j]前面,arr[j]在arr[i]后面,这就叫稳定 插入排序&#xff1a; 优势: 越有序查找速度越快 时间复杂度: O(N^2) 空间复…...

opencalib中lidar2camera安装记录

目录 一、opencalib安装 二、lidar2camera的安装 三、测试运行 四、出现过的问题 一、opencalib安装 代码地址&#xff1a;https://github.com/PJLab-ADG/SensorsCalibration/blob/master/README.md # pull docker image sudo docker pull scllovewkf/opencalib:v1 # Aft…...

整个自动驾驶小车001:概述

材料&#xff1a; 1&#xff0c;树梅派4b&#xff0c;作为主控&#xff0c;这个东西有linux系统&#xff0c;方便 2&#xff0c;HC-S104超声波模块&#xff0c;我有多个&#xff0c;不少于4个&#xff0c;我可以前后左右四个方向都搞一个 3&#xff0c;l298n模块&#xff0c;…...

windows本地搭建mmlspark分布式机器平台流程

文章目录 windows本地搭建mmlspark分布式机器平台流程安装环境pyspark环境spark环境java环境hadoop环境1.修改hadoop配置文件下的jdk地址为自己的实际地址2.修改bin文件离线环境jar包环境1mmlsprk第三方包jar包环境2参考代码我有话说其他问题记录概要参考文献windows本地搭建mm…...

深入探究 Next.js 中的 getServerSideProps 和 getStaticProps 用法及区别

引言&#xff1a; Next.js 是一个流行的 React 框架&#xff0c;它提供了许多强大的功能来简化服务器渲染&#xff08;SSR&#xff09;和静态生成&#xff08;SSG&#xff09;的过程。其中&#xff0c;getServerSideProps 和 getStaticProps 是两个重要的函数&#xff0c;用于在…...

餐饮业如何高效经营?赶紧闭眼抄这个方法!

在现代社会&#xff0c;餐饮业已经成为人们日常生活中不可或缺的一部分。为了提高食堂运营效率&#xff0c;满足不断增长的客户需求&#xff0c;智慧收银系统应运而生。 智慧收银系统帮助食堂业主更好地理解其客户&#xff0c;提高服务质量&#xff0c;优化库存管理&#xff0c…...

餐饮外卖小程序商城的作用是什么

随着互联网及线上餐饮的发展趋势&#xff0c;行业洗牌正在加速&#xff0c;并且对餐饮连锁门店提出更高要求&#xff0c;餐饮数字化转型加快&#xff0c;积极发展线上经营是不少餐饮商家的首选。这其中&#xff0c;餐饮外卖商城成为很多餐饮品牌的线上经营品牌&#xff0c;也是…...

nRF52832 SDK15.3.0 基于ble_app_uart demo FreeRTOS移植

参考资料&#xff1a;Nrf52832 freeOS系统移植_nrf5283操作系统-CSDN博客 这里把移植经验记录下来&#xff0c;供有需要的同学参考&#xff0c;有不对的地方也请大家批评指正。 把FreeRTOS移植到 nRF5_SDK_15.3.0_59ac345\examples\ble_peripheral\ble_app_uart工程&#xff…...

电厂数据可视化三维大屏展示平台加强企业安全防范

园区可视化大屏是一种新型的信息化手段&#xff0c;能够将园区内各项数据信息以图像的形式直观呈现在大屏幕上&#xff0c;便于管理员和员工进行实时监控、分析和决策。本文将从以下几个方面介绍园区可视化大屏的作用和应用。 VR数字孪生园区系统是通过将实际园区的各种数据和信…...

2246: 【区赛】【宁波32届小学生】最佳交换

目录 题目描述 输入 输出 样例输入 样例输出 提示 代码 题目描述 星星小朋友和 N-1 个小伙伴一起玩了一上午的纸牌游戏&#xff0c;星星总是能赢&#xff0c;气焰嚣张&#xff0c; 小伙伴们决定出道纸牌问题难倒星星&#xff0c;让他别再狂妄自大了&#xff0c;问题是这…...

Java面试记录

文章目录 1、final关键字2、synchronized关键字&#xff08;1&#xff09;synchronized的功能&#xff1a;&#xff08;2&#xff09;synchronized的底层实现原理&#xff1a; 3、Java中线程同步的实现方法&#xff08;1&#xff09;. 使用synchronized关键字&#xff1a;&…...

【数据库】聚集函数

聚集函数 聚集函数一览AVG() 函数COUNT() 函数MAX() 函数MIN() 函数SUM() 函数 组合聚集函数 聚集函数一览 我们需要汇总数据而不是实际检索&#xff0c;此时我们使用聚集函数进行处理&#xff1b; 聚集函数一览表如下&#xff1a; 函数说明AVG()返回平均值COUNT()返回数量总…...

【单元测试】--编写单元测试

一、编写第一个单元测试 编写第一个单元测试通常包括以下步骤。以下示例以C#和NUnit为例&#xff1a; 创建测试项目&#xff1a; 在Visual Studio中&#xff0c;创建一个新的Class Library项目&#xff0c;这将是你的单元测试项目。在解决方案资源管理器中&#xff0c;右键点…...

ES(elasticsearch) - 三种姿势进行分页查询

1. from size 浅分页 "浅"分页可以理解为简单意义上的分页。它的原理很简单&#xff0c;就是查询前20条数据&#xff0c;然后截断前10条&#xff0c;只返回10-20的数据。这样其实白白浪费了前10条的查询。 GET test_dev/_search {"query": {"bool&…...

AQS是什么?AbstractQueuedSynchronizer之AQS原理及源码深度分析

文章目录 一、AQS概述1、什么是AQS2、技术解释3、基本原理4、AQS为什么这么重要 二、AQS数据结构1、AQS的结构2、ReentrantLock与AbstractQueuedSynchronizer3、AQS的state变量4、AQS的队列5、AQS的Node&#xff08;1&#xff09;Node的waitStatus&#xff08;2&#xff09;属性…...

Wan2.2-I2V-A14B环境配置避坑指南:解决C盘空间不足与依赖冲突

Wan2.2-I2V-A14B环境配置避坑指南&#xff1a;解决C盘空间不足与依赖冲突 1. 引言 最近在Windows系统上配置Wan2.2-I2V-A14B环境时&#xff0c;我发现很多朋友都遇到了相同的问题&#xff1a;C盘空间莫名其妙被占满、各种依赖包冲突报错、CUDA版本不匹配等等。作为一个踩过所…...

中医AI革命:如何用70亿参数模型破解千年诊疗难题

中医AI革命&#xff1a;如何用70亿参数模型破解千年诊疗难题 【免费下载链接】CMLM-ZhongJing 首个中医大语言模型——“仲景”。受古代中医学巨匠张仲景深邃智慧启迪&#xff0c;专为传统中医领域打造的预训练大语言模型。 The first-ever Traditional Chinese Medicine large…...

探索瑞芯微RK3588硬件电路设计:从资料到实战

瑞芯微RK3588硬件电路设计资料&#xff08;Altium原理图PCB全套硬件资料&#xff09;包含RK3588全套硬件资料和用RK3588设计的一款网络硬盘录像机&#xff08;原理图和PCB均用Altium Designer打开&#xff09;使用3D封装最近在研究硬件设计这块&#xff0c;发现了一份超有料的瑞…...

AI辅助开发:描述需求,快马AI自动生成旅行商问题算法与可视化

最近在做一个旅行商问题(TSP)的算法项目&#xff0c;想试试用AI辅助开发能有多高效。结果发现InsCode(快马)平台的AI功能真的帮了大忙&#xff0c;整个过程特别顺畅。这里分享一下我的体验。 需求分析阶段 刚开始我只是简单描述了需求&#xff1a;"需要一个用模拟退火算…...

JeecgBoot启动配置

一、引入maven指定自己的maven仓库 二、指定JDK 记得apply&#xff01;&#xff01;&#xff01;&#xff01;然后OK 三、配置MySQL数据库(尽量≥5.7版本) 四、运行db文件夹下的SQL文件 五、后端本地环境&#xff08;application-dev.yml&#xff09;指定好数据源 1、M…...

intv_ai_mk11生成效果:对‘提高工作效率’需求输出结构清晰、可执行的5条建议

intv_ai_mk11生成效果&#xff1a;对"提高工作效率"需求输出结构清晰、可执行的5条建议 1. 模型介绍与使用场景 intv_ai_mk11是一个基于Llama架构的中等规模文本生成模型&#xff0c;特别适合处理通用问答、文本改写、解释说明等任务。这个模型已经完成本地部署&am…...

数字记忆自主化:GetQzonehistory技术架构与数据保护实践指南

数字记忆自主化&#xff1a;GetQzonehistory技术架构与数据保护实践指南 【免费下载链接】GetQzonehistory 获取QQ空间发布的历史说说 项目地址: https://gitcode.com/GitHub_Trending/ge/GetQzonehistory 一、技术演进视角下的数据脆弱性危机 数字存储技术的迭代速度与…...

Python智能内存回收实战:3种GC策略对比+4个生产级调优参数配置(附压测数据)

第一章&#xff1a;Python智能体内存管理策略生产环境部署在高并发、长生命周期的Python智能体服务中&#xff0c;内存管理直接影响系统稳定性与响应延迟。默认的CPython引用计数循环垃圾回收&#xff08;GC&#xff09;机制在动态对象频繁创建销毁的场景下易引发内存抖动和不可…...

坚定信心,顺势而为 ——中国企业出海与人工智能时代语言服务行业的新机遇

坚定信心&#xff0c;顺势而为——中国企业出海与人工智能时代语言服务行业的新机遇前言人工智能技术的逐步成熟以及智能体的普遍应用是最近两三年的热点和趋势&#xff0c;很多人说&#xff0c;2026年是智能体爆发的元年。春节期间&#xff0c;豆包、千问、元宝等50亿元的红包…...

一文了解嵌入式硬件通信核心:串口/CAN/以太网,底层逻辑居然全一样!

做嵌入式、工控、硬件通信开发久了&#xff0c;总会有一个突然顿悟的瞬间&#xff1a;串口、以太网、CAN、TCP、USB、蓝牙、Modbus……这些看似毫无关联、应用场景天差地别的通信方式&#xff0c;扒开底层逻辑才发现&#xff0c;居然是同一个模子刻出来的。看透这一点后&#x…...