您的位置:首页 > 其它

二叉排序树的建立_查找_插入_删除

2013-09-25 20:36 417 查看
#include<iostream>
using namespace std;

typedef int KeyType;
typedef int Status;
#define OK 1
#define ERROR 0

typedef struct
{
KeyType Key;
}ElemType,TElemType;

typedef struct BitNode
{
TElemType data;
struct BitNode *lchild,*rchild;
}BitNode,*BiTree;

Status SeachBST(BiTree T,KeyType key,BiTree f,BiTree &p)
{
if(!T)
{
p=f;
return false;
}
else
if(key==T->data.key)
{
p=T;
return true;
}
else if(key<T->data.key)
SeachBST(T->lchild,key,T,p);
else
SeachBST(T->rchild,key,T,p);
return false;
}

Status InsertBST(BiTree &T,ElemType e)
{
BiTree p,s;
if(!SeachBST(T,e.key,NULL,p))
{
s=(BiTree)malloc(sizeof(BitNode));
s->data=e;
s->lchild=s->rchild=NULL;
if(!p)
T=s;
else if(e.key<p->data.key)
p->lchild=s;
else
p-rchild=s;
return true;
}
else
return false;
}
void Delete(BiTree &p);
Status DeleteBST(BiTree &T,KeyType key)
{
if(!T)
return false;
else
{
if(key==T->data.key)
Delete(T);
else if(key<T->data.key)
DeleteBST(T->lchild,key);
else
DeleteBST(T->rchild,key);
return true;
}
}
void Delete(BiTree &p)
{
BiTree q,s;
if(!p->rchild)
{
q=p;
p=p->lchild;
}
else if(!p-lchild)
{
q=p;
p=p->rchild;
free(q);
}
else
{
q=p;
s=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);
}
}
Status InOrderBST(BiTree T)
{
if(T)
InOrderBST(T->lchild);
cout<<T->data.key<<" ";
InOrderBST(T-rchild);
}
return true;
}
void main()
{
BiTree T=new BiTNode;
T->lchild=T-rchild=NULL;
ElemType e;
for(e.key=1;e.key<20;e.key++)
InsertBST(T,e);
InOrderBST(T);
system("pause");
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: