删除二叉树节点完整c语言程序以及例子,C语言C++实现二叉树构造与查找删除节点.doc...

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);

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值