删除树中的所有节点 - C ++

时间:2014-01-04 14:30:00

标签: c++ tree destroy

尝试在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);
}

1 个答案:

答案 0 :(得分:2)

您的代码实际上永远不会释放除root之外的任何节点,而是多次。此外,您需要手动将指针设置为NULLfree不会为你做那件事。

然而,这并不能完全解释这种行为。我期待分段错误。 (实际上它会导致未定义的行为)你可能偶然在某个地方在图中创建了一个循环。

同样free不会调用析构函数,这可能会产生意想不到的副作用。您应该使用new / delete或尝试一些不需要手动分配的数据结构。

相关问题