平衡二叉树学生信息管理系统程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
#include
#include
typedef struct A
{
char NO[10];
char name[10];
char birt[10];
char clas[10];
char sex[2];
}Elemtype;
typedef struct B
{
Elemtype data;
int bf;
struct B *lchild;
struct B *rchild;
}node,*pnode;
void left1(pnode &ptree,int &taller) {
pnode p1,p2;
if(ptree->bf==0)
{
ptree->bf=1;
taller=1;
}
else if (ptree->bf==-1)
{
ptree->bf=0;
taller=0;
}
else
{
p1=ptree->lchild;
if (p1->bf==1)
{
ptree->lchild=p1->rchild;
p1->rchild=ptree;
ptree->bf=p1->bf=0;
ptree=p1;
}
else if (p1->bf==-1)
{
p2=p1->rchild;
p1->rchild=p2->lchild;
p2->lchild=p1;
ptree->lchild=p2->rchild;
p2->rchild=ptree;
if (p2->bf==0)
ptree->bf=p1->bf=0;
else if (p2->bf==1)
{
p1->bf=0;
ptree->bf=-1;
}
else
{
p1->bf=1;
ptree->bf=0;
}
ptree=p2;
ptree->bf=0;
}
taller=0;
}
}
void right1(pnode &ptree,int &taller) {
pnode p1,p2;
if(ptree->bf==0)
{
ptree->bf=-1;
taller=1;
}
else if (ptree->bf==1)
{
ptree->bf=0;
taller=0;
}
else
{
p1=ptree->rchild;
if (p1->bf==-1)
{
ptree->rchild=p1->lchild;
p1->lchild=ptree;
ptree->bf=p1->bf=0;
ptree=p1;
}
else if (p1->bf==1)
{
p2=p1->lchild;
p1->lchild=p2->rchild;
p2->rchild=p1;
ptree->rchild=p2->lchild;
p2->lchild=ptree;
if (p2->bf==0)
ptree->bf=p1->bf=0;
else if (p2->bf==-1)
{
p1->bf=0;
ptree->bf=1;
}
else
{
p1->bf=-1;
ptree->bf=0;
}
ptree=p2;
ptree->bf=0;
}
taller=0;
}
}
int insert(pnode &ptree,Elemtype e,int &taller) {
if (ptree==NULL)
{
ptree=new node;
ptree->data=e;
ptree->lchild=ptree->rchild=NULL;
ptree->bf=0;
taller=1;
}
else
{
if (strcmp(e.NO,ptree->data.NO)==0)
{
return 0;
}
if(strcmp(e.NO,ptree->data.NO)<0)
{
if((insert(ptree->lchild,e,taller))==0)
return 0;
if(taller==1)
left1(ptree,taller);
}
else
{
if((insert(ptree->rchild,e,taller))==0)
return 0;
if(taller==1)
right1(ptree,taller);
}
}
return 1;
}
void left2(pnode &ptree,int &taller)
{
pnode p1,p2;
if (ptree->bf==1)
{
ptree->bf=0;
taller=1;
}
else if (ptree->bf==0)
{
ptree->bf=-1;
taller=0;
}
else
{
p1=ptree->rchild;
if(p1->bf==0)
{
ptree->rchild=p1->lchild;
p1->lchild=ptree;
p1->bf=1;
ptree->bf=-1;
ptree=p1;