二进制搜索树解构器
Binary Search Tree Deconstructor
下面我发布了我试图用来创建二进制搜索树的解构器的代码。如果我在删除节点之前消除了将父节点链接到NULL的尝试,那么代码会完美运行(它不会永远运行,并且会正确地删除节点)。然而,据我所知,指针现在指向的是垃圾数据,而不是NULL。我该如何解决这个问题,或者我试图解决这个问题时出了什么问题?(我得到的错误是"无法读取内存")。
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
运算符。
如果要删除一个节点,则不需要同时将其数据成员清零。在你把垃圾扔掉之前,不需要把它擦亮。
相关文章:
- 有根的二进制搜索树.保留与其父级的链接
- 正在尝试重载二进制搜索树分配运算符
- 测试树是否为二进制搜索树
- 使用二进制搜索树中的迭代器对象访问左侧节点
- 二进制搜索树没有匹配的函数调用
- 二进制搜索树不变的标头文件
- 二进制搜索树插入带参数参考
- 搜索非二进制树C 的功能
- 将一个不充实的二进制搜索树转换为完整的二进制搜索树
- 二进制搜索树操作程序错误:分割故障(核心倾倒)
- 二进制搜索树插入垃圾数据
- 二进制搜索树构造的麻烦
- 将二进制搜索树导出到.csv文件
- 检查节点是否是二进制搜索树的根
- 在二进制搜索树中删除节点
- 简单的二进制搜索树非递归添加功能
- 二进制搜索树的数组实现
- 如何从二进制搜索树中删除节点
- 我如何扭转二进制搜索树
- 递归获取二进制搜索树的高度