嘿我想从二叉树中删除一个节点。我知道如果一个节点同时有左右子节点,则无法删除它。所以我已经相应地编写了代码。但是每次程序运行时都会崩溃。
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);}
}
}
答案 0 :(得分:2)
快速浏览:
if (b->lchild->data!=d && b->lchild!=NULL)
应该是:
if (b->lchild!=NULL && b->lchild->data!=d)
在阅读数据之前,您需要检查b->lchild
是否有有效地址。