Ниже я опубликовал код, который я пытаюсь использовать для создания деконструктора для двоичного дерева поиска. Если я удалю попытки связать родителей с NULL до удаления узла, код будет работать отлично (он не будет работать вечно и правильно удалит узлы). Однако из того, что я должен понимать, указатели теперь указывают на данные мусора, а не на NULL. Как я могу исправить это или что не так с моей попыткой исправить это? (Ошибка, которую я получаю, «не может прочитать память»).Binary Search Tree Deconstructor
int BinarySearchTree::postOrderTreeDelete(PhoneInfo * x)
{
static int counter = 0;
if (x == NULL)
{
return counter;
}
else
{
postOrderTreeDelete(x->getLeft());
postOrderTreeDelete(x->getRight());
//deleten(x);
if (x == x->getParent()->getLeft())
x->getParent()->setLeft(NULL);
else if (x == x->getParent()->getRight())
x->getParent()->setRight(NULL);
delete x;
counter++;
}
postOrderTreePrint();
return counter;
}
Что произойдет, если дерево имеет, скажем, всего 2 или 3 уровня? Вы использовали ваш отладчик для отладки проблемы? – PaulMcKenzie
Упоминание «postOrder» в имени функции бессмысленно, так как это единственный разумный способ удалить дерево. – ooga