c++ - 递归函数破坏一般树c++

标签 c++ recursion tree

到目前为止,这是我在 SkillTree 析构函数中调用的 DestroyTree 函数:

void SkillTree::DestroyTree(Node*& root)
{

  if(root)
  {
      for(int i = 0; i < child_max && root && root->child[i]; ++i)
      {
          if(root)
          {
              DestroyTree(root->child[i]);
              delete root;
              root = NULL;
          }
      }

  }

}

我对 root 的所有检查感到有点尴尬,但我只是想让它工作。

如果有帮助的话,这也是我的类定义的一部分......

class SkillTree
{
  public:
    SkillTree(void);
    ~SkillTree(void);   

  protected:
    struct Node
    {
       Node() : max(DEFAULT_CHILD_MAX), child(new Node*[DEFAULT_CHILD_MAX])
        {
            for(int i = 0; i < max; ++i)
                child[i] = NULL;
        }

       ~Node()
       {
           for(int i = 0; i < max; ++i)
               delete child[i];

           child = NULL;
       }

       int max;
       Skill data;
       Node** child;    //a dynamic array of child pointers
    };

    void DestroyTree(Node*& root);

    int child_max;
    const static int DEFAULT_CHILD_MAX = 3;
    char* title;
    Node* root;
};

我认为除了第一个节点之外,最左边的节点和其他子节点一起被删除了。我知道我有内存泄漏问题,所以我希望如果我解决了这个问题,那么我的内存泄漏问题也会得到解决。

最佳答案

DestroyTree 函数应如下所示:

void SkillTree::DestroyTree()
{
    if (root)
    {
        delete root;
        root = NULL;
    }
}

和像这样的 Node 析构函数:

Node::~Node()
{
    for (size_t i = 0; i < max; ++i)
    {
        if (child[i])
            delete child[i];
    }
    delete [] child;
}

列出每次更改的原因有点长。如果有任何不清楚的地方,请随时提问!

关于c++ - 递归函数破坏一般树c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25300338/

相关文章:

c++ - Linux中加载时链接与运行时链接期间的符号地址

C++ 删除 wchar_t* 指向的内容

C++ - 在单元测试中创建 spy

c++ - (x ^ 0x1) != 0 是什么意思?

c - K&R 练习 6-2 - 自引用结构

MySQL - 具有父子关系的递归sql查询

java - 在java中使用递归来解决迷宫问题

java - 递归题: Revision

c++ - 为什么要用树状数据结构来表示文字冒险游戏中的数据?

algorithm - 将集合合并成有向图