数据结构--6.5二叉排序树(插入,查找和删除)

目录

一、创建

二、插入

三、删除


二叉排序树(Binary Sort Tree)又称为二叉查找树,它或者是一棵空树,或者是具有下列性质的二叉树:

------若它的左子树不为空,则左子树上所有结点的值均小于它的根结构的值;

------若它的右子树不为空,则右子树上所有结点的值均大于它的根结构的值;

------它的左、右子树也分为二叉排序树(递归)。

一、创建

cpp 复制代码
//二叉树的二叉链表结点结构定义
typedef struct BiTNOde
{
	int data;
	struct BiTNode * lchild,*rchild;
}BiTNode, *BiTree;

//递归查找二叉排序树T中是否存在key
//指针f指向T的双亲,其初始值调用值为NULL
//若查找成功,则指针p指向该数据元素结点,并返回TRUE
//否则指针p指向查找路径上访问的最后一个结点,并返回FALSE
Status SearchBST(BiTree T,int key,BiTree f,BiTree *p)
{
	if(!T)   //查找不成功
	{
		*p = f;
		return FALSE; 
	} 
	else if(key == T->data)
	{
		return SearchBST(T->lchild,key,T,p);    //在左子树继续查找 
	}
	else
	{
		return SearchBST(T->rchild,key,T,p);   //在右子树继续查找 
	} 
} 

二、插入

cpp 复制代码
//insertBST
//当二叉排序树T中不存在关键字等于key的数据元素时
Status InsertBST(BiTree *T,int key)
{
	BiTree p,s;
	if(!SearchBST(*T,key,NULL,&p))
	{
		s = (BiTree)malloc(sizeof(BiTNode));
		s->data = key;
		s->lchild = s->rchild = NULL;
		
		if(!p)		//查找不到key 
		{
			*T = s; //插入s为新的根结点 
		}
		else if(key < p->data)
		{
			p->lchild = s; //插入s为左孩子 
		} 
		else 
		{
			p->rchild = s; //插入s为右孩子 
		} 
		return TURE; 
	}
	else
	{
		return FALSE; //树中已有关键字相同的结点,不再插入 
	}
 } 

三、删除

cpp 复制代码
Status DeleteBST(BiTree *T,int key)
{
	if(!*T)
	{
		return FALSE;
	}
	else
	{
		if(key == (*T)->data)
		{
			return Delete(T);
		}
		else if(key < (*T)->data)
		{
			return DeleteBST(&(*T)->lchild,key);
		}
		else if(key > (*T)->data)
		{
			return DeleteBST(&(*T)->rchild,key);
		}
	}
 } 

Status Delete(BiTree *p)
{
	BiTree q,s;
	if((*p)->rchild == NULL)
	{
		p = *p;
		*p = (*p)->lchild;
		free(q);
	}
	else if((*p)->lchild == NULL)
	{
		q = *p;
		*p = (*p)->rchild;
		free(q);
	}
	else
	{
		q = *p;
		s = (*p)->lchild;
		while(s->rchild)
		{
			q = s;
			s = s->rchild;
		}
		(*p)->data = s->data;
		if(q  != p)
		{
			q->rchild = s->lchild;
		}
		else
		{
			q->lchild = s->lchild;
		}
		free(s);
	}
	return tree;
}
相关推荐
inrichtt4 小时前
第八课时:SPI总线揭秘:四线全双工通信的奥
c语言·数据结构·stm32·单片机·嵌入式硬件
HPtiger4 小时前
数据结构——选择排序
数据结构·算法·排序算法
丑梨数据5 小时前
信创环境里跑文档工具:格式兼容与本地合规的几个坑
数据结构·人工智能·算法·决策树·排序算法
烂蜻蜓5 小时前
Pandas入门教程(四):Series数据结构——创建、索引与常用方法
数据结构·pandas
CS创新实验室12 小时前
一棵树怎么做到“自平衡还不太费力“?——红黑树的旋转与染色
数据结构·算法·红黑树·408·计算机考研
Logic10113 小时前
C语言/数据结构位运算题解:异或XOR找出被挑选一次的果子编号——只出现一次的数字
c语言·数据结构·算法·数组·位运算·时间复杂度·空间复杂度
从小白到软工14 小时前
4-3 项目-学生成绩管理系统(上)
c语言·开发语言·数据结构·经验分享·ai编程
悠仁さん14 小时前
非类型模板参数的特化与偏特化
java·数据结构·算法
haluhalu.15 小时前
深入理解 AI Agent(1.2):Harness 工程——模型之外的竞争力
前端·数据结构·人工智能·python·langchain·个人开发
垆边人似月.15 小时前
幻兽防御战(贪心算法)
数据结构·算法