typedef int KeyData; //假设的关键字类型
typedef struct Node
{
KeyData Key;
struct Node *Lchild,*Rchild;
}BSTNode,*BSTree;
//基于二叉树的排序查找的非递归实现
BSTree SearchBST(BSTree bst,KeyType K)
{
BSTree q;
q=bst;
while(q)
{
if(q->Key==K)
return q;
else if (K<q->Key) 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(K<bst->Key) return SearchBST(bst->Lchild,K);
else return SearchBST(bst->Rchild,K) ;
}
//二叉排序树的插入操作
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(p)
{
if(p->Key==K) break;
f=p;
else if(K<p->Key) p=p->Lchild;
else p=p->Rchild;
}
if(p==NULL) return bst;
if(p->Lchild==NULL)
{
if(f==NULL) bst=p->rchild;
else if( f->lchild == p) f->Lchild=p->Rchild;
else f->Rchild=p->Rchild;
free(p);
}
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;
}
关于二叉排序树的相关操作
于 2019-01-26 22:36:50 首次发布