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_> nodePtr. Не могли бы вы отправить решение? Благодарю. –
'delete nodePtr;' происходит только в том случае, если nodePtr является листом, не так ли? но вы не делаете своего родителя листом. – Elazar
, но не удаляет nodePtr, по существу, делает левый или правый автоматически NULL? –