我有一个由以下节点组成的二叉搜索树:
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 写一个等效的函数。
您的函数不起作用,因为您没有更改父节点的内容。它仍然具有已删除节点的地址,因此(如果此内容已在其他地方重新分配并更改),它可以访问它...!
但是内存确实被释放了。