我有一个由以下节点组成的二叉搜索树:

struct ProductNode
{
    Product data;
    ProductNode* left;
    ProductNode* right;
};

并且我有一个采用ProductNode指针参数的删除功能:
void ProductCategory::deleteandnull(ProductNode * p)
{
    if(p!=NULL)
    {
        delete p;
        p=NULL;
    }
}

我没有删除方法的问题。添加新叶子时,左右指针为NULL,但是当我使用此功能时,我看到没有删除,并且此操作不会更改二进制搜索树。那是什么问题

最佳答案

用这个代替:

void ProductCategory::deleteRightChild(ProductNode * p)
{
    if(p->right!=NULL)
    {
        delete p->right;
        p->right = NULL;
    }
}

为左 child 写一个等效的函数。

您的函数不起作用,因为您没有更改父节点的内容。它仍然具有已删除节点的地址,因此(如果此内容已在其他地方重新分配并更改),它可以访问它...!

但是内存确实被释放了。

10-08 03:54