用栈实现二叉搜索树的非递归析构

non recursive destructor for binary search tree by implementing stack

本文关键字:递归 析构 搜索树 实现      更新时间:2023-10-16

这段代码有一个运行时错误,我在确定问题是什么时遇到了问题。栈类有一个基本的栈操作(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();
            }
        }
    }
}

您在(nodePtr的父级)->left中delete为nodePtr,但未将其更改为null,因此您再次进入。

尝试添加这个:

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