尝试在C ++中实现deleteTree
方法。此方法将树的根作为参数,因此应删除从根到叶的所有节点。我的代码似乎在逻辑上是正确的,但每次运行时我都会得到一个无限循环。任何人都可以找出问题所在吗?
template <class A, class B> void Tree<A,B>::deleteTree(Node<A,B>* rootNode) {
if (rootNode->left != NULL) {
deleteTree(rootNode->left);
}
if (rootNode->right != NULL) {
deleteTree(rootNode->right);
}
free(root);
}
答案 0 :(得分:2)
您的代码实际上永远不会释放除root
之外的任何节点,而是多次。此外,您需要手动将指针设置为NULL
。 free
不会为你做那件事。
然而,这并不能完全解释这种行为。我期待分段错误。 (实际上它会导致未定义的行为)你可能偶然在某个地方在图中创建了一个循环。
同样free
不会调用析构函数,这可能会产生意想不到的副作用。您应该使用new
/ delete
或尝试一些不需要手动分配的数据结构。