【问题标题】:Deleting all the nodes in a tree - C++删除树中的所有节点 - C++
【发布时间】:2014-01-04 14:29:59
【问题描述】:

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

【问题讨论】:

  • 你的树有圆圈吗?
  • @thumbmunkeys,那会是一棵很有趣的树
  • 为什么使用free 而不是delete?您是否使用malloc 而不是new?或者free是你写的函数?
  • @Leeor 人们会犯错,是吗? :)

标签: c++ tree destroy


【解决方案1】:

您的代码实际上从未释放除root 之外的任何节点,但多次释放。之后您还需要手动将指针设置为NULLfree 不会为你这样做。

然而,这并不能完全解释这种行为。我预计会出现分段错误。 (实际上它会导致未定义的行为)您可能在某个地方不小心在图表中创建了一个循环。

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

【讨论】:

  • 这不是真的,由于递归
  • 他是对的,这里没有定义root,他应该释放rootNode。不错的收获!
  • @thumbmunkeys 唯一免费免费的root 似乎是Tree&lt;A,B&gt; 的成员
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-07-03
  • 2016-02-18
  • 1970-01-01
相关资源
最近更新 更多