递归后序遍历解除分配二进制树节点

时间:2013-11-10 16:18:03

标签: c++ algorithm recursion tree binary-tree

我在使用递归函数中的后序遍历解除分配二进制树节点时遇到问题。

这是我的结构的一部分。我的树解构器将从根

开始解除分配
struct Node {
    Base * data;
    Node * left, * right, *parent;
    static long occupancy;
    long balance;
    long height;

    Node (Base * element) : data (element), left (0), right (0),
        parent (0), balance (0), height(0) {

         occupancy++;
    }


    ~Node (void) {

        deleteNodes();

    }

    void deleteNodes (void) {

        if(height == 0)
            return;

        if(left)
            left->deleteNodes();
        if(right)
            right->deleteNodes();

        if(left)
            delete left;
        if(right)
            delete right;

        delete data;


    }
}

2 个答案:

答案 0 :(得分:3)

您不需要以递归方式删除节点(如果您尝试多次删除指针,则可能会导致问题) - 如果删除则会自动(递归地)调用析构函数孩子们。

~Node (void) {
   if (left)
      delete left;
   if (right)
      delete right;
   delete data;
}

答案 1 :(得分:1)

对于递归遍历,您始终将树的根作为参数传入。

void deleteNodes(Node *rover) {
    //**check if rover is nullptr
    deleteNodes(rover->left);
    deleteNodes(rover->right);
    //... 
}

**你不需要检查rover-> left和rover-> right是否为nullptr,因为你在函数的开头检查它。

希望它有所帮助。