C ++ удалить все узлы из двоичного дерева - PullRequest
0 голосов
/ 24 февраля 2020

Привет, я пишу двоичное дерево на c ++, и у меня возникли проблемы с удалением всех узлов. Я попытался использовать следующую функцию для этого:

void RemoveAll() { RemoveAll(Root); }
void RemoveAll(Node *node)
  {
  if (!node) return;

  RemoveAll(node->Left);
  RemoveAll(node->Right);
  delete node;
  }

И мои функции печати:

void PreOrder() { PreOrder(Root); }
void PreOrder(Node *node)
  {
  if (!node) return;

  std::cout << node->Element << std::endl;
  PreOrder(node->Left);
  PreOrder(node->Right);
  }

void InOrder() { InOrder(Root); }
void InOrder(Node *node)
  {
  if (!node) return;

  InOrder(node->Left);
  std::cout << node->Element << std::endl;
  InOrder(node->Right);
  }

void PostOrder() { PostOrder(Root); }
void PostOrder(Node *node)
  {
  if (!node) return;

  PostOrder(node->Left);
  PostOrder(node->Right);
  std::cout << node->Element << std::endl;
  }

Проблема заключается в том, что если я потом запусту функцию печати, чтобы увидеть, если узлы действительно удалено, я получаю исключение, которое говорит мне, что данный узел был 0xFFFFFFFFFFFFFFF7. Есть идеи почему? Заранее спасибо.

1 Ответ

1 голос
/ 24 февраля 2020

Спасибо Jarod42 и 0x499602D2, которые предоставили ответ.

Окончательное решение выглядит следующим образом для всех пользователей функций, имеющих одинаковую проблему:

void RemoveAll() { RemoveAll(Root); }
void RemoveAll(Node *&node)
  {
  if (!node) return;

  RemoveAll(node->Left);
  RemoveAll(node->Right);

  delete node;
  node = nullptr;
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...