回 帖 发 新 帖 刷新版面

主题:why can't删除二叉树???

#include <stdio.h>
#define MAX 100

typedef struct node{
char data;
struct node*lc,*rc;}
bitree;

bitree *creat()
{bitree  *r;
char c;
scanf("%c",&c);
if(c!=' ') {r=(bitree*)malloc(sizeof(bitree));
r->data=c;
r->lc=creat();
r->rc=creat();
return r;}
else return NULL;}

void ccbl(bitree *r)
{bitree * p; bitree* q[MAX];
int f,t;f=t=0;
if(r==NULL) return ;
q[t++]=r; while(f!=t) {p=q[f++];printf("%c",p->data);
if(t<MAX)
{if(p->lc) q[t++]=p->lc;
if(p->rc)q[t++]=p->rc;}
else {printf("overflow");exit(0);}}}

void Del_Sub(bitree *r)
{if(r->lc) Del_Sub(r->lc);
if(r->rc) Del_Sub(r->rc);
free(r); }

bitree Del_Sub_x(bitree*r,char x)
{if(r->data==x) Del_Sub(r);
else{if(r->lc) Del_Sub_x(r->lc,x);
if(r->rc) Del_Sub_x(r->rc,x);}}

void xxbl(bitree *r)
{bitree *s[MAX];
int top=0;
do {  while(r!=NULL)
{printf("%c",r->data);
if(r->rc)
{ if(top>=MAX) {printf("overflow"); exit(0);}
s[top++]=r->rc;}
r=r->lc;}
if(top>0) r=s[--top];}
while(r!=NULL||top>0);   }

main()
{bitree*r;char x;
r=creat();
ccbl(r);
printf("input x");printf("\n");
scanf("%c",&x);printf("tt");
Del_Sub_x(r,x);
xxbl(r);printf("\n");
return 0;}





回复列表 (共1个回复)

沙发

没有置空?
void Del_Sub(bitree *r)
{if(r->lc) Del_Sub(r->lc);
if(r->rc) Del_Sub(r->rc);
free(r); r=NULL;}

我来回复

您尚未登录,请登录后再回复。点此登录或注册