通过实现堆栈实现二进制搜索树的非递归析构函数

时间:2013-04-28 00:11:27

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

此代码存在运行时错误,我在确定问题所在时遇到问题。 stack类有一个基本的堆栈操作(pop push top),用于保存遍历的位置。

parityBST::~parityBST()
{

    if (root == NULL)
    {
        return;

    }
    else 
    {
        //postOrder non recursive traversal for destructor
        stack* s1 = new stack();
        s1->push(root);

        binaryNode* nodePtr= root;
        while (!s1->isEmpty())
        {
            //RUNTIME ERROR HERE (after several iterations)
            if (nodePtr->left)
            {
                s1->push(nodePtr->left);
                nodePtr = nodePtr->left;
            } else if (nodePtr->right)
            {

                s1->push(nodePtr->right);
                nodePtr = nodePtr->right;
            } else 
            {

                delete nodePtr;
                s1->pop();
                nodePtr = s1->getTop();
            }

        }

    }

}

1 个答案:

答案 0 :(得分:1)

你在(nodePtr的父节点) - >左边是delete nodePtr,但是没有把它改成null,所以你再次走进它。

尝试添加:

s1->pop();
binaryNode* parent = s1->getTop()
if (parent->left==nodePtr)
    parent->left = NULL;
else
    parent->right = NULL;
delete nodePtr;
nodePtr = parent;