嘿,我想从我的二叉树中删除一个节点。我知道如果节点同时具有左右子节点,则无法删除它。所以我已经相应地编写了代码。但是每次程序运行时,它都会崩溃。
void btdel(btree *b, char d)
{
if (b->lchild->data!=d&&b->lchild!=NULL)
btdel(b->lchild,d);
if (b->rchild->data!=d&&b->rchild!=NULL)
btdel(b->rchild,d);
if (b->lchild!=NULL&&b->lchild->data==d)
{
if (b->lchild->rchild==NULL)
b->lchild=b->lchild->lchild;
else if (b->lchild->lchild==NULL)
b->lchild=b->lchild->rchild;
else {cout<<"cannot delete"; exit(1);
}
}
else if (b->rchild!=NULL&&b->rchild->data==d)
{
if (b->rchild->rchild==NULL)
b->rchild=b->rchild->lchild;
else if (b->rchild->lchild==NULL)
b->rchild=b->rchild->rchild;
else
{cout<<"Cannot delete. "; exit(1);}
}
}