[数据结构]二叉排序树

二叉排序树是一种特殊二叉树,每个节点的关键码遵循左小右大的规则,适用于快速检索、插入和删除操作。本文介绍了二叉排序树的概念、构造方法,包括插入节点的算法描述,以及节点删除的三种情况分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉排序树

概念

一颗二叉树,每个节点对应一个关键码,且每个结点左子树中所有结点的码值都小于关键码,右子树中所有节点码值都大于关键码值,这样的树叫做二叉排序树。
利用二叉排序树,可以将目录表组织成二叉树的形式,既有顺序表那样较高的检索效率,又有链表哪有插入删除灵活的特性。

二叉排序树的构造

二叉排序树的存储结构 使用二叉链表

typedef int keytype;
typedef struct node{
   
	keytype key;          //关键字项 
	datatype other;             //其他数据项 
	struct node *lchild,*rchild;
}bstnode;

二叉排序树构造的算法描述
对于任意一组数据元素{R1,R2,…,Rn} :
1、令R1为二叉树的根
2、若R2>R1, 令R2为R1的右子树的根节点,否则作为左子树的根节点
3、对于n个结点,依次与前面生成的结点比较以确定输入结点的位置

生成二叉排序树的代码分为两个函数,一个是插入函数,先定位插入值的位置,再选择插入到左子树还是右子树。另一个是生成二叉排序树的函数,输入结点后调用插入函数。


bstnode* insertBst(bstnode *t,bstnode *s){
       //t是已有的树,s是要插入的结点 
	bstnode *p,*f;
	p=t;
	while(p!=NULL){
        //定位 
		f=p;
		if(s->key==p->key) return t;     //s根节点的值与原树根节点相同 直接返回原
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值