二进制搜索树析构函数

时间:2014-10-28 21:39:45

标签: c++ memory binary-search-tree

下面我发布了我试图用来为二叉搜索树创建解构函数的代码。如果我在删除节点之前消除了将父节点链接到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;
}

2 个答案:

答案 0 :(得分:0)

如果你正在摧毁树,为什么要在你去的时候创建树的所有中间阶段?

这应该足够了:

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;
    }
}

答案 1 :(得分:0)

您应该在析构函数中编写,并完全删除返回的计数:

BinarySearchTree::~BinarySearchTree()
{
    delete _left;
    delete _right;
}

然后调用者只需使用delete运算符。

如果您要删除节点,则无需将其数据成员归零。扔掉之前无需抛光垃圾。