C++删除二叉树中的所有节点

vkc1a9a2  于 2023-02-20  发布在  其他
关注(0)|答案(1)|浏览(123)

嘿,我正在用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

3mpgtkmj

3mpgtkmj1#

感谢Jarod42和0x499602D2提供了答案。
对于将来遇到相同问题的所有用户,最终解决方案如下所示:

void RemoveAll() { RemoveAll(Root); }
void RemoveAll(Node *&node)
  {
  if (!node) return;
                     
  RemoveAll(node->Left);
  RemoveAll(node->Right);
  
  delete node;
  node = nullptr;
  }

相关问题