二叉树删除功能错误

时间:2013-08-27 17:25:10

标签: c++

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

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

1 个答案:

答案 0 :(得分:2)

快速浏览:

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

应该是:

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

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