C++ 二叉搜索树解构器
下面我发布了我试图用来为二叉搜索树创建解构器的代码。如果我在删除节点之前消除了将父节点链接为NULL的尝试,那么代码将不会永远正常运行,并正确删除节点。然而,据我所知,指针现在指向垃圾数据,而不是NULL。我该如何解决这个问题,或者我试图解决这个问题有什么问题?我得到的错误是无法读取内存C++ 二叉搜索树解构器,c++,memory,binary-search-tree,C++,Memory,Binary Search Tree,下面我发布了我试图用来为二叉搜索树创建解构器的代码。如果我在删除节点之前消除了将父节点链接为NULL的尝试,那么代码将不会永远正常运行,并正确删除节点。然而,据我所知,指针现在指向垃圾数据,而不是NULL。我该如何解决这个问题,或者我试图解决这个问题有什么问题?我得到的错误是无法读取内存 int BinarySearchTree::postOrderTreeDelete(PhoneInfo * x) { static int counter = 0; if (x =
int BinarySearchTree::postOrderTreeDelete(PhoneInfo * x)
{
static int counter = 0;
if (x == NULL)
{
return counter;
}
else
{
postOrderTreeDelete(x->getLeft());
postOrderTreeDelete(x->getRight());
//deleten(x);
if (x == x->getParent()->getLeft())
x->getParent()->setLeft(NULL);
else if (x == x->getParent()->getRight())
x->getParent()->setRight(NULL);
delete x;
counter++;
}
postOrderTreePrint();
return counter;
}
如果你无论如何都要破坏这棵树,为什么要在你前进的过程中创建这棵树的所有中间阶段呢 这就足够了:
int BinarySearchTree::postOrderTreeDelete(PhoneInfo * x)
{
if (!x)
{
return 0;
}
else
{
int counter = 1; // for x
counter += postOrderTreeDelete(x->getLeft());
counter += postOrderTreeDelete(x->getRight());
delete x;
return counter;
}
}
您应该将其写入析构函数中,并完全消除返回的计数:
BinarySearchTree::~BinarySearchTree()
{
delete _left;
delete _right;
}
然后调用方只需使用delete操作符
如果要删除节点,则无需将其数据成员归零。在你扔掉垃圾之前,不需要把垃圾擦亮。如果树只有2或3层,会发生什么?您是否使用调试器调试该问题?在函数名中提及postOrder毫无意义,因为这是删除树的唯一合理方法。