此代码存在运行时错误,我在确定问题所在时遇到问题。 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();
}
}
}
}
答案 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;