C++ 删除二叉树中的所有节点
C++ delete all nodes from binary tree
嘿,我正在用 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
。任何想法为什么?提前致谢。
感谢提供答案的 Jarod42 和 0x499602D2。
所有遇到相同问题的功能用户的最终解决方案如下所示:
void RemoveAll() { RemoveAll(Root); }
void RemoveAll(Node *&node)
{
if (!node) return;
RemoveAll(node->Left);
RemoveAll(node->Right);
delete node;
node = nullptr;
}
嘿,我正在用 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
。任何想法为什么?提前致谢。
感谢提供答案的 Jarod42 和 0x499602D2。
所有遇到相同问题的功能用户的最终解决方案如下所示:
void RemoveAll() { RemoveAll(Root); }
void RemoveAll(Node *&node)
{
if (!node) return;
RemoveAll(node->Left);
RemoveAll(node->Right);
delete node;
node = nullptr;
}