0
此代码有运行时错误,我在确定问题是什么时遇到问题。堆栈类有一个基本的堆栈操作(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的parent-> right中,我没有删除nodePtr。您可以请发布解决方案吗?谢谢。 – 2013-04-28 00:18:33
'delete nodePtr;'只有当nodePtr是一片叶子时才会发生,不是吗?但你不要让它的父母成为一片叶子。 – Elazar 2013-04-28 00:21:24
但不删除nodePtr本质上是使左侧或右侧自动为NULL? – 2013-04-28 00:36:20