return(p0);
};
for(i=0;i<40;i++){
pq[i]=NULL;
};
a=0;
yong=bianlishendu(p0);
for(i=0;i<40;i++){
for(j=0;j
if(pq[j]==p)break;
};
if(j==i){pq[i]=p;}
elsei=i-1;
if(a==0){
if(p->l==NULL){a=1;}
else{p1=p;p=p->l;a=0;continue;};
};
if(a==1){
if(p->r==NULL){a=2;}
else{p1=p;p=p->r;a=0;continue;};
};
if(a==2){
p1=p;p=p1->p;
if(p->l==p1){a=1;};
if(p->r==p1){a=2;};
if(p1->l==NULL&&p1->r==NULL){p1->quan=0;}
elseif(p1->l==NULL){r=p1->r;p1->quan=-r->shendu-1;}
elseif(p1->r==NULL){l=p1->l;p1->quan=l->shendu+1;}
else{r=p1->r;l=p1->l;p1->quan=l->shendu-r->shendu;}
};
if(p0->r==p1&&a==2){
l=p0->l;
r=p0->r;
if(l!
=NULL)p0->quan=l->shendu-r->shendu;
elsep0->quan=-r->shendu;
gotoerr8;
}
elseif(p0->l==p1&&p0->r==NULL){
if(p0==p){p0->quan=p1->shendu+1;gotoerr8;}
else{;};
}
else{;};
};
err8:
a=i;
for(i=0;i<=a;i++){
if(pq[i]->quan==2){
p2=pq[i]->l;
if(p2->quan==1){
if(p2!
=NULL){p3=p2->l;p4=p2->r;};
p5=pq[i]->r;
p6=pq[i]->p;
if(p6==NULL){p2->p=NULL;}
elseif(p6->l==pq[i]){p6->l=p2;p2->p=p6;}
else{p6->r=p2;p2->p=p6;};
pq[i]->l=p4;if(p4!
=NULL)p4->p=pq[i];
pq[i]->r=p5;if(p5!
=NULL)p5->p=pq[i];
pq[i]->p=p2;if(p2!
=NULL)p2->r=pq[i];
if(p2!
=NULL)p2->l=p3;if(p3!
=NULL)p3->p=p2;
pq[i]->quan=0;
pq[i]->shendu=pq[i]->shendu-2;
if(p2!
=NULL)p2->quan=0;
p=p0;
while(p->p!
=NULL){
p=p->p;
};
yong=bianlishendu(p);
break;
};
if(p2->quan==-1){
if(p2!
=NULL)p3=p2->r;
p4=pq[i]->p;
if(p2!
=NULL)p5=p2->l;
if(p3!
=NULL)p6=p3->l;
if(p3!
=NULL)p7=p3->r;
p8=pq[i]->r;
if(p4==NULL){p3->p=NULL;}
elseif(p4->l==pq[i]){p4->l=p3;p3->p=p4;}
else{p4->r=p3;p3->p=p4;};
if(p3!
=NULL)p3->l=p2;if(p2!
=NULL)p2->p=p3;
if(p3!
=NULL)p3->r=pq[i];pq[i]->p=p3;
if(p2!
=NULL)p2->r=p6;if(p6!
=NULL)p6->p=p2;
pq[i]->l=p7;if(p7!
=NULL)p7->p=pq[i];
pq[i]->r=p8;if(p8!
=NULL)p8->p=pq[i];
pq[i]->quan=-1;
if(p2!
=NULL)p2->quan=0;
if(p3!
=NULL)p3->quan=0;
if(p8!
=NULL)pq[i]->shendu=p8->shendu+1;
if(p2!
=NULL)p2->shendu=p2->shendu-1;
if(p2!
=NULL&&p3!
=NULL)p3->shendu=p2->shendu+1;
while(p->p!
=NULL){
p=p->p;
};
yong=bianlishendu(p);
break;
};
};
if(pq[i]->quan==-2){
p2=pq[i]->r;
if(p2->quan==-1){
if(p4!
=NULL){p3=p2->l;p4=p2->r;};
p5=pq[i]->l;
p6=pq[i]->p;
if(p6==NULL){p2->p=NULL;}
elseif(p6->l==pq[i]){p6->l=p2;p2->p=p6;}
else{p6->r=p2;p2->p=p6;};
pq[i]->l=p5;if(p5!
=NULL)p5->p=pq[i];
pq[i]->r=p3;if(p3!
=NULL)p3->p=pq[i];
pq[i]->p=p2;if(p2!
=NULL)p2->l=pq[i];
pq[i]->quan=0;
pq[i]->shendu=pq[i]->shendu-2;
if(p2!
=NULL)p2->quan=0;
while(p->p!
=NULL){
p=p->p;
};
yong=bianlishendu(p);
break;
};
if(p2->quan==1){
if(p2!
=NULL){p3=p2->l;p5=p2->r;};
p4=pq[i]->p;
if(p4!
=NULL){p6=p3->r;p7=p3->l;};
p8=pq[i]->r;
if(p4==NULL){p3->p=NULL;}
elseif(p4->l==pq[i]){p4->l=p3;p3->p=p4;}
else{p4->r=p3;p3->p=p4;};
if(p3!
=NULL)p3->r=p2;if(p2!
=NULL)p2->p=p3;
if(p3!
=NULL)p3->l=pq[i];pq[i]->p=p3;
if(p2!
=NULL)p2->l=p6;if(p6!
=NULL)p6->p=p2;
pq[i]->l=p8;if(p8!
=NULL)p8->p=pq[i];
pq[i]->r=p7;if(p7!
=NULL)p7->p=pq[i];
pq[i]->quan=0;
if(p2!
=NULL)p2->quan=-1;
if(p3!
=NULL)p3->quan=0;
if(p8!
=NULL)pq[i]->shendu=p8->shendu+1;
if(p2!
=NULL)p2->shendu=p2->shendu-1;
if(p3!
=NULL&&p2!
=NULL)p3->shendu=p2->shendu+1;
while(p->p!
=NULL){
p=p->p;
};
yong=bianlishendu(p);
break;
};
};
};
for(i=0;i<=a;i++){
if(pq[i]->quan>=-1&&pq[i]->quan<=1)continue;
elsebreak;
};
if(i==a+1);
else{gotoerr10;};
return(p);
};
voidnull(shangpin*p1)
{
shangpin*p;
p=p1;
p->p=NULL;
p->l=NULL;
p->r=NULL;
};
voidmain()
{
chara,b,mingcheng[40],*p1;
intc,d=0,i,yong;
shangpinhead,meiyou[40];
shangpin*p,*t;p=&head;
err7:
p1=&mingcheng[0];cout<<"初始化输入A,插入输入B,查询输入C,删除输入D,了解客户需要的新商品输入E,结束输入F."<cin>>a;
if(a=='A'){
cout<<"进入初始化程序:
"<chushi(p);
cout<<"已生成一个头节点,是否继续插入节点Y/N"<cin>>b;
if(b=='Y'){
err6:
t=charu(p);
cout<<"请输入访问次数:
"<cin>>t->cishu;
};
p=pinghenghua(p);
cout<<"是否继续Y/N"<cin>>b;
if(b=='Y'){
gotoerr6;
}
else{
cout<<"初始化结束。
"<};
};
if(a=='C'){
cout<<"进入查询程序:
"<"<chara[40];
cin>>a;
c=chaxun(p,a);
if(c==0){
for(i=0;iyong=strcmp(meiyou[i].mingcheng,a);
if(yong==0){
meiyou[i].cishu=meiyou[i].cishu+1;
break;
};
};
if(i==d){
strcpy(meiyou[i].mingcheng,a);
meiyou[i].cishu=1;d=d+1;
};
};
cout<<"*************************"<};
if(a=='D'){
cout<<"进入删除程序:
"<c=shanchu(p);
cout<<"*************************"<p=pinghenghua(p);
};
if(a=='E'){
for(i=0;icout<<"商品名称为:
"<};
cout<<"*************************"<};
if(a=='B'){
cout<<"进入插入程序:
"<t=charu(p);
cout<<"*************************"<p=pinghenghua(p);
};
if(a=='F'){;}
elsegotoerr7;
}
五、调试过程
应该划分模块,对不同的操作应用不同的函数来完成。
在调试过程中,关于平衡二叉树的那部分比较难,没能实现文件的储存和读取功能。
六、结果分析
初始化输入A,插入输入B,查询输入C,删除输入D,了解客户需要的新商品输入E,结束输
入F.
#######################################
A
进入初始化程序:
*************************
建立初始节点:
请输入要查询的商品的名称:
a
请输入此商品价格:
1
请输入访问次数:
1
已生成一个头节点,是否继续插入节点Y/N
Y
请输入要查询的商品的名称:
b
请输入此商品的价格:
2
请输入访问次数:
2
是否继续Y/N
Y
请输入要查询的商品的名称:
c
请输入此商品的价格:
3
请输入访问次数:
3