0

嘿,我想从我的二叉树中删除一个节点。我知道如果节点同时具有左右子节点,则无法删除它。所以我已经相应地编写了代码。但是每次程序运行时,它都会崩溃。

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

1 回答 1

2

快速查看:

if (b->lchild->data!=d && b->lchild!=NULL)

应该:

if (b->lchild!=NULL && b->lchild->data!=d)

在读取其数据之前,您需要检查b->lchild它是否具有有效地址。

于 2013-08-27T17:30:08.403 回答