想你的天空:
因你那个帖子被某笨蛋管理人员错误删除.所以我来亡羊补牢!
void Cancel(struct btnode *bt,int x)
{
struct btnode *t,*t1,*t2;
int m=-1;
t=bt;
while(t!=NULL)
{
if(t->data==x) break;
else if(t->data<x) t2=t,t=t2->rchild;
else t2=t,t=t->lchild;
}
if(t!=NULL) t1=t;
else return;
if((t->rchild==NULL)&&(t->lchild==NULL))
{
if(t2->lchild==t) t2->lchild=NULL,free(t);
else t2->rchild=NULL,free(t);
}
else
{
if(t1->rchild!=NULL)
{
t1=t1->rchild,m=0 ;
while(t1->lchild!=NULL)
t2=t1,t1=t2->lchild,m=2;
}
else t1=t1->lchild,m=1;
t->data=t1->data;
if(m==0) t->rchild=t1->rchild,free(t1);
else if(m==1) t->lchild=t1->lchild,free(t1);
else if(m==2)
{
if(t->rchild==NULL) t2->lchild=NULL,free(t1);
else t2->lchild=t1->rchild,free(t1);
}
}
return;
}
以上是你的题目要求..我以整数为元素数据!.可能有的地方写法不同.请自己改正!
[此贴子已经被作者于2006-6-9 1:28:50编辑过]
----------------解决方案--------------------------------------------------------