平衡二叉树学生信息管理系统程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

相关文档
最新文档