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