关于排序二叉树的建立查询插入删除操作的实现代码(C语言)《数据结构与算法》(人民邮电出版社)

//定义数据结构
typedef int KeyData; //假设的关键字类型

typedef struct Node //结点
{
KeyData Key;
struct Node *Lchild,*Rchild;
}BSTNode,*BSTree;
//1. 基于二叉树的排序查找的非递归实现(亦可使用递归函数求解)
BSTree SearchBST(BSTree bst,KeyType K)
{
BSTree q;
q=bst;
while(q)
{
if(q->KeyK)
return q;
else if (KKey) q=q->Lchild;
else q=q->Rchild;
}
return NULL;
}
//基于二叉树的排序查找的递归实现
BSTree SearchBST(BSTree bst,KeyType K)
{
if(!bst) return NULL;
else if(K
bst->Key) return bst;
else if(KKey) return SearchBST(bst->Lchild,K);
else return SearchBST(bst->Rchild,K) ;
}

//2. 二叉排序树的插入操作
void InsertBST(BSTree *bst,KeyType K)
{
BiTree s;
if(*bst==NULL)
{
s=(BSTree)malloc(sizeof(BSTNode));
s->Key=K;
s->Lchild=NULL;
s->Rchild=NULL;
*bst=s;
}
else if (K<(*bst)->Key) InsertBST(&((*bst)->Lchild),K);
else if (K>(*bst)->Key) InsertBST(&((*bst)->Rchild),K);
}

//二叉排序树的创建
void CreateBST(BSTree *bst)
{
KeyType Key;
*bst=NULL;
scanf("%d",&key);
while(Key!=ENDKEY)
{
InsertBST(bst,Key);
scanf("%d",&Key);
}
}

//二叉排序树的删除操作
BSTree *DelBST(BSTree bst,KeyType K)
{
BSTree *p,*f,*s,*q;
p=bst;
f=NULL;
while§
{
if(p->KeyK) break;
f=p;
else if(KKey) p=p->Lchild;
else p=p->Rchild;
}
if(p
NULL) return bst;
if(p->LchildNULL)
{
if(f
NULL) bst=p->rchild;
else if( f->lchild == p) f->Lchild=p->Rchild;
else f->Rchild=p->Rchild;
free§;
}
else
{
q=p;
s=p->Lchild;
while(s->rchild)
{
q=s;
s=s->Rchild;
}
if(q==p) q->Lchild=s->Lchild;
else q->Rchild=s->Lchid;
p->Key=s->Key;
free(s);
}
return bst;
}

//具体算法参照《数据结构与算法》 王署燕 教材220页,并非本人著作,转载请署名出处;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值