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

问题描述 投票:0回答:1

嘿,我用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。有什么想法吗?预先感谢。

c++ binary-tree tree-traversal
1个回答
0
投票

感谢提供答案的Jarod42和0x499602D2。

对于有相同问题的所有功能用户,最终的解决方案如下所示:

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

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

  delete node;
  node = nullptr;
  }
© www.soinside.com 2019 - 2024. All rights reserved.