data)q->lch=s;
else q->rch=s;
printf("插入成功!\n");
return 1;
}
else {printf("插入失败!\n");return 0;}
}
int deletebst(pointer &p,Etype key)
{
if(!p){return 0;}
else if(p->data==key){deletedata(p);return 1;}
else if(keydata) return deletebst(p->lch,key);
else return deletebst(p->rch,key);
}
void deletedata(pointer &p)
{
pointer q,s;
if(!p->rch)
{
q=p;p=p->lch;free(q);
printf("查找成功,已删除该结点!\n");
return;
}
else if(!p->lch)
{
q=p;p=p->rch;free(q);
printf("查找成功,已删除该结点!\n");
return;
}
else
{
q=p;s=p->lch;
while(s->rch){q=s;s=s->rch;}
p->data=s->data;
if(q!=p)q->rch=s->lch;
else q->lch=s->lch;
delete s;
printf("查找成功,已删除该结点!\n");
return;
}
printf("无此结点!\n");
}
BiTNode *creat_bt1()//利用数组建立
{ BiTNode *t,*p,*v[20]; int i,j; Etype e;
printf("\n 输入结点的序号i,结点的数据?"); scanf("%d,%d",&i,&e);
while(i!=0 && e!=0)
{ p=(BiTNode *)malloc(sizeof(BiTNode));
p->data=e; p->lch=NULL; p->rch=NULL;
v[i]=p;
if (i==1) t=p;
else{ j=i/2;
if(i%2==0) v[j]->lch=p;
else v[j]->rch=p
;
}
printf("\n i,data=?"); scanf("%d,%d",&i,&e);
}
return(t);
}
//模仿线序遍历递归建立二叉树
BiTNode *creat_bt2()
{ BiTNode *t; int e;
printf("\n data="); scanf("%d",&e);
if(e==0) t=NULL;
else { t=(BiTNode *)malloc(sizeof(BiTNode));
t->data=e;
printf("输入其左孩子 无左孩子输入0");
t->lch=creat_bt2();
printf("输入最下层未知左孩子结点的左孩子 无左孩子弟输入0");
t->rch=creat_bt2();
}
return(t);
}
void inorder(BiTNode *p)
{
if (p) { inorder(p->lch);
printf(" %3d",p->data);
inorder(p->rch);
}
}
//利用中序递归遍历二叉树的方法,计算树中结点个数
void numb(BiTNode *p)
{ if (p) { numb(p->lch);
{ printf("%3d",p->data);
n++;
if(p->lch==NULL && p->rch==NULL) n0++;
if((p->lch==NULL && p->rch!=NULL)||
(p->lch!=NULL && p->rch==NULL)) n1++;
if(p->lch!=NULL && p->rch!=NULL) n2++;
}
numb(p->rch);
}
}