BST的插入+删除任意节点的递归实现

二叉树(BST树)内结点的删除(3种情况全解) 现在有一棵二叉树查找树如下: 如果我们需要删除一个结点,而且在删除之后,依然满足二叉查找树的数据排序策略。此时删除操作可分为一下三种情况。如下情况1:结点没有左子树 如图:一棵没有左子树的二叉树 如果在此情况下删除结点,按照结点的位置又可以分为三种处理方式。如下 删除根结点:删除根结点也就是删除结点 5,此时只需将根结点指针指向其右子树结点。如下图 删除叶子结点:如果删除的结点是叶子结 阅读详情

主要是在bst上删除任意一个节点。

通过寻找中序后继节点来完成连接。

 

#include <iostream>
#include <vector>
#include <cstdio>
#include <queue>
#include <cmath>
#include <string.h>
using namespace std;
const int maxn = 2e5+32;
#define LL long long
const int inf = 0x3f3f3f3f;



class bst
{
public:
	struct node
	{
		int key;
		node *left;
		node *right;
		node(int k):key(k),left(nullptr),right(nullptr){}
	};

	node *head=nullptr;

	void insert(node *now,int key)
	{
		if(head==nullptr){
			node *temp=new node(key);
			head=temp;
			return;
		}
		if(key>now->key){
			if(now->right==nullptr){
				node *temp=new node(key);
				now->right=temp;
				return;
			}
			insert(now->right,key);
		}
		else if(key==now->key)
			return;
		else{
			if(now->left==nullptr){
				node *temp=new node(key);
				now->left=temp;
				return;
			}
			insert(now->left,key);
		}
	}
	void midout(node *now)//中序输出
	{
		if(now!=nullptr){
			midout(now->left);
			printf("%d\n",now->key);
			midout(now->right);
		}
	}
	node* findmin(node *now)
	{
		return now->left==nullptr?now:findmin(now->left);
	}
	node* deletemin(node *now)
	{
		if(now->left==nullptr){
			node *temp=now->right;
			delete now;
			return temp;
		}
		now->left=deletemin(now->left);
		return now;
	}
	node* deletekey(node *now,int key)
	{
		if(now->key==key){
			node* temp=findmin(now->right);//找到中序后继节点temp(右子树里的最小值)
			temp->right=deletemin(now->right);//把右子树里的最小值删除,返回的是这棵右子树,把它赋值给中序后继节点temp的right。
			temp->left=now->left;//中序后继节点的left就是被删节点的left
			return temp;
		}else if(now->key<key){
			now->right=deletekey(now->right,key);
			return now;
		}else{
			now->left=deletekey(now->left,key);
			return now;
		}
	}





};


int main()
{
	bst a;
	a.insert(a.head,10);
	a.insert(a.head,15);
	a.insert(a.head,7);
	a.insert(a.head,4);
	a.insert(a.head,8);
	a.midout(a.head);
	cout<<" ****\n";
	a.head=a.deletekey(a.head,10);//把头节点删除了,必须更新一下头节点
	a.midout(a.head);




}

 

二叉搜索树(BST)递归与非递归的插入、删除、查找的实现 昨天碰到了二叉搜索树(BST)这种数据结构,索性详细的学习了一遍。BST的定义: 如果一棵树的左子树不为空,那么其所有节点的值均小于其根结点的值,如果右子树不为空,那么其所有节点的值均大于其根结点的值,它的左右子树也满足如上性质。空树也是BST。我的BST的实现是以没有重复元素为前提,其实有重复元素也无大碍,只是把实现过程中相关的<改成<=即可,节点结构定义:class Node{ pub 阅读详情

相关推荐

BST树核心操作详解:插入、删除与查找实战

二叉搜索树(Binary Search Tree, BST)是一种基于二叉树结构的有序数据容器,其关键性质为:对于任意节点 $x$,其左子树中所有节点的值均小于 $x.val$,右子树中所有节点的值均大于 $x.val$。这一递归定义不仅约束了局部父子关系,也保证了全局中序遍历序列的严格单调递增性。# 简化版BST节点定义该结构性质使得查找操作可在 $O(h)$ 时间内完成($h$ 为树高),并在动态集合管理中兼顾插入、删除与有序遍历需求,成为实现符号表和优先队列的重要基础。

weixin_32687875的博客 670

BST树的插入、删除、查询操作

1.什么是BST树 2.BST树的节点 3.BST树的插入操作 4.BST树的删除操作 5.BST树的查询操作 1.什么是BST树 二叉搜索树(Binary Serach Tree),又称二叉排序树,其简写为BST树。对于二叉树上的每一个节点,如果满足左孩子的值 < 父节点的值 < 右孩子的值,那么就称这棵二叉树为二叉搜索树。 例如: 在这棵二叉树中,对于每一个节点均满足左孩子 < 父节点 < 右孩子。 2.BST树的节点 BST的树的节点与普通的二叉树一样,节点中存储当前节点的

我爱吃香锅的博客 6334

BST树节点的插入,删除和查找

实现了BST树节点的插入,删除和查找,其中删除只实现了一种,即用前驱替换,另外一种用后继替换没有实现。

BST删除节点

首先,BST节点的删除分为几种情况: (a)当该节点为叶子节点,则让该节点的父节点指向其变为NULL,然后释放节点; (b)当该节点不是叶子节点,但左子树或者右子树为空,则: (1)若左子树为空,则让该节点父节点指向其右节点; (2)若右子树为空,则让该节点父节点指向其左节点。 (c)当该节点不是叶子节点,且左子树和右子树都不为空,则: ...

weixin_30568715的博客 446

计算机网络-自顶向下方法 第三章课后习题答案(第七版)

复习题 R1. a) 就叫这个协议为简单传输协议STP(Simple Transport Protocol)。在发送方,STP从发送进程接收不超过1196字节的数据块、目标主机地址和目标端口号。STP向每个块添加一个4字节的头,并将目标进程的端口号放在头中。STP然后将目标主机地址和结果段提供给网络层。网络层将段交付给目的地主机的STP。目的主机基于STP检查段中的端口号,从段中提取数据,并将数据传递给由端口号标识的进程。 b) 在发送方,STP从发送进程接收不超过1192字节的数据块、目标主机地址和目标端

Erekilu的博客 2万+

迅投miniQMT量化交易之【网格交易】的实现(25)——写在最后

和大家一起分享如何使用miniQMT实现我们自己的网格交易系统。如果您对量化交易感兴趣,欢迎一起交流。

tzzqn2008的专栏 829

二分搜索树节点删除

本文介绍了二分搜索树节点删除的原理和实现方法。在实际应用中,删除节点是一个重要的操作,需要我们熟练掌握。在删除节点时,要确保树仍然满足二分搜索树的性质,避免出现错误。

csbysj2020的博客 332

高德地图-获取定位-失败原因-浏览器定位异常场景

提示:也能实现,但是需要https协议,而且请求时间很长,要么你用梯子,还是不太合适.

shi15926lei的博客 4204

【二叉树】数据结构——BST二叉树基本概念及算法设计(插入、删除、遍历操作)

二叉树一、二叉树基本概念二、二叉树的算法设计1、构建二叉树节点2、插入节点3、删除节点4、遍历二叉树5、层次遍历 一、二叉树基本概念 二叉树的其中一个重要应用,是提供一种快速查找数据的方法,即:将数据节点按照某种规律形成一棵二叉树,然后利用二叉树特殊的逻辑结构减少搜索数据的次数,提高查找的效率。 这种按照某种规律构建,用来提高搜索性能的二叉树,被称为搜索二叉树(Binary Search Tree),即BST。 具体而言,二叉树提高搜索效率的秘诀在于:按照“小-中-大”(当然“大-中-小”也是一样的)的规律

皮皮不调皮的博客 5089

时序分析-由D触发器结构来理解Tsu、Th

FPGA逻辑单元内的D触发器(D-FF)是一种在时钟的上升沿(或下降沿)将输入信号的变化传送至输出的边沿触发器。 数字电子技术基础-闫石(第五版)边沿D触发器内部结构见下图: 而FPGA原理与结构(日)一书中,内部结构较之上图多了俩反相器: 由传输门和俩个反相器组成一个循环电路(锁存器),再由前后两级锁存器按主从结构链接而成。这里的传输门起开关作用,随着CLK的状态变化切换开关。只看输出的话,前级锁存器的值会随着时钟输入的变化井然有序地传入后级锁存器。为了防止时钟信号变化时输入信号发生冒险,从而使稳定.

XY_Chang的博客 3969

中国 it 集成商 主要有哪些 主要做什么工作

既要懂技术(云计算/AI),又要吃透行业(金融/政务)。:用国产化方案(麒麟OS+达梦数据库)替换Oracle/Windows。:如为银行搭建数据中心(采购华为服务器+思科交换机)。:数据中心监控、故障处理(如华胜天成服务国家电网)。:核心交易系统(如中科软为保险公司开发精算平台)。:智慧城市(如太极股份承建“一网通办”政务平台)。:HIS医院信息系统(如东华软件的电子病历系统)。:硬件透明化(如服务器价格战)压缩集成毛利。:工厂设备联网(新华三的工业互联网平台)。

hxsln11的博客 3030

二叉搜索树(BST)

二叉搜索树也叫二叉搜索树或二叉排序树。

m0_74182090的博客 203

Jetson编译安装pycuda

可使用nvcc --version查看是否有信息输出,若没有,且安装cuda的情况下,需要手动将CUDA 的路径添加到环境变量中。编译生成_pvt_struct.cpython-38-aarch64-linux-gnu.so文件。基于jetson orin nano jetpack512模块上安装pycuda。4、获取pycuda源码(版本根据实际情况获取)2、进入conda环境并安装cuda工具包。9、若未检测出来需要清除并强制编译。7、编译成功后安装pycuda。5、配置编译并设置环境变量。

qq_48175141的博客 969

删除BST的节点

BST是什么? 二叉搜索树BST(Binary Search Tree),又称为二叉排序树。 该树要么是一个空树,要么具有以下性质: 序号 BST的性质 1 左树不空,则左树中所有节点中的值都小于根节点的值 2 右树不空,则右树中所有节点中的值都大于根节点的值 3 左右子树也是BST 下图中的树便是一棵BST: BST的节点插入 创建二叉搜索树比较简单,首先我们定义出二叉搜索树的节点类模板BSTNode,该类应具有三个成员,分别是左孩子指针leftchild,右孩子指针righ

qq_39208237的博客 2255

利用Dify构建文档内容的分析对比

本次主要做了一些workflow和Agent的应用实现,供大家参考。主要目的是为了进行两个内部报告文件的内容对比,特别是报告中的各类审批表、申请表、推荐表和流程对比,本地数据通过知识库方式分别加载到两个知识库中,编制工作流针对同一个问题进行知识库检索,之后将查询结果进行合并,再一起提交给LLM进行对比,最终将对比分析结果以markdown方式返回显示。主要包括如何构建知识库,如何设计workflow、如何将工作流发布为工具、如何设计提示词、如何在agent中引入前面发布的工具,最终通过agent实现与用户交

hhue2007的专栏 2522

Android面试指南及参考答案

【摘要】LesPark招聘Android开发工程师,要求3年以上经验,负责客户端功能开发与优化。岗位需掌握Java、多线程、网络编程(TCP/UDP/HTTP)及性能调试工具。面试重点考察:1)核心技术如网络协议选择(TCP可靠消息/UDP实时音视频)、内存泄漏分析;2)业务能力如图片懒加载三级缓存设计、启动速度优化案例;3)高阶系统原理如插件化框架设计;4)行为问题应对策略。建议候选人准备并发编程、JVM差异等深度知识,并量化项目优化成果,尤其关注社交应用相关的图片处理、实时通信等场景题。

郑伟强dev的专栏 798

BST的概念,以及查找,插入,删除算法

BST的概念BST,又叫平衡二叉树,是一种循关键码访问的二叉树,并且要求保持顺序性,即任一节点不小于其左后代,不大于其右后代(注意是后代,不是孩子)。BST的顺序性使得其中序遍历序列一定是单调非降的。BST的查找算法BinNodePos(T) BST_Search1(BinNodePos(T)&amp;v,const T&amp; e,BinNodePos(T)hot) {     if(v==n...

zhengxu_Lee的博客 8903

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

【算法】BST的非递归插入,删除,查询

对于二叉树上的每一个节点,如果满足左孩子的值 < 父节点的值 < 右孩子的值,把满足上面性质的二叉树就称作BST树,Binary Search/Sort Tree。3.删除的节点有两个孩子,找待删除节点的前驱节点(或者后继节点),用前驱或者后继节点的值把待删除节点的值覆盖掉,然后直接删除前驱或者后继节点就可以了。BST如果不为空,从根节点开始比较,找到合适的位置,生成新的节点,并把节点的地址写入父节点相应的地址域当中。的有序性,它具有快速的查找、插入和删除操作的特点,因此被广泛应用于数据结构和算法中。

m0_73839343的博客 645

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

数据结构与算法 - 二叉搜索树(BST):插入、删除与查找的逻辑

本文介绍了二叉搜索树(BST)的核心操作——查找、插入和删除的实现逻辑与细节。BST凭借其"左小右大"的有序特性,能够高效完成这些操作。查找通过递归或迭代方式实现;插入操作总是发生在叶子节点;删除则需处理三种情况,尤其是双孩子节点需要寻找前驱或后继作为继承者。文章通过Java代码示例、Mermaid图表等形式,清晰展示了BST的工作原理和实现方法,帮助读者深入理解这一重要数据结构。

千淘万漉虽辛苦,吹尽狂沙始到金 2万+

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

二叉搜索树节点删除解析:场景、策略与实现

二叉搜索树节点删除操作解析 本文详细介绍了二叉搜索树(BST)的节点删除操作,主要涵盖三种删除场景及其实现策略。

✨ 欢迎来到【Seal ^_^ 的优快云博客】!✨ 1万+

BST的查找、插入、删除

BST的查找、插入、删除 BST (binary search tree) 二叉搜索树 结合了vector和list的优点 主要接口有三种:查找,插入,删除 查找: 时间复杂度O(h)(即不超过树的高度) 由于BST在局部具有顺序性、在整体具有单调性的特点,因此BST的直接投影与其中序遍历相符合。关键码从左到右依次单调递增。 在查找目标关键码时,动作类似于vector中的二分查找。因为BST的...

JTY541464341的博客 971

Java-高级数据结构-BST树的概念、以及它的插入、删除操作的实现

** 一、什么是BST树?** BST: 每个节点最多有两个孩子:右孩子》父节点的值》左孩子 即为 BST树 Binary search Tree 二叉搜索树 示意图如下: 如图所示:58为根节点(root),23是它的左孩子,82是它的右孩子,左孩子比58小,右孩子比58大,其他节点同理,23的左孩子为12,右孩子为35。 标题二、BST树节点的实现 /** * BST树的节点类型 */...

WXH0722的博客 635

BST树

目录一、BST树二、查找操作递归实现非递归实现三、插入操作递归实现非递归实现四、删除操作递归实现非递归实现 一、BST树 二叉查找树(Binary Search Tree),又名二叉搜索树或二叉排序树。可以是一颗空树,或者是具有下列性质的二叉树: (1)若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; (2)若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值。 定义BST...

sspudding 2565

深入理解二叉搜索树(BST)及其删除操作详解(C++实现)

左子树所有节点的值 < 根节点的值右子树所有节点的值 > 根节点的值左右子树也分别是二叉搜索树这种结构使得查找、插入、删除操作的时间复杂度可以达到O(h),其中h为树的高度对过程全力以赴,对结果淡然处之。

一个小孩博客 1367

BST树的插入,删除,查找(递归和非递归),先序,中序,后序(递归和非递归)

关于二叉查找树的操作还是挺重要的,所以在此实现了BST的相关操作。 一、BST树的相关定义 二叉查找树(Binary Search Tree),(又:二叉搜索树,二叉排序树)它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。 ...

rookie_ly的博客 1081

175-BST树-上(定义、递归&非递归插入删除查询)

1、BST树定义 BST树称作二叉搜索树(Binary Search Tree)或者二叉排序树(Binary Sort Tree),它或者是一棵空树;或者是具有下列性质的二叉树: 1、若左子树不为空,则左子树上所有节点的值均小于它的根节点的值 2、若右子树不为空,则右子树上所有节点的值均大于它的根节点的值 3、左右子树也分别满足二叉搜索树性质 特点: 每一个节点都满足 左孩子的值(不为空)< 父节点的值 <右孩子的值(不为空) 类似于二分查找算法。 在这棵树上,我们找一个元素,最多找4.

Edward_LF的博客 303
上一篇: 牛客练习赛39
下一篇: 实现next_permutation
Mr_Treeeee
博客等级 码龄10年 38粉丝 551原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值