用于二叉树的c ++析构函数

时间:2016-06-08 17:00:26

标签: c++ binary-tree destructor

当我运行析构函数时,运行失败,我不知道为什么这是我的树头

class ExpressionTree {
private:
    ExpressionNode* root;
public:
    ExpressionTree() :
    hashmap(100000),
    root(NULL) {
    };
    virtual ~ExpressionTree(){
        helper(root);
    }

    void helper(ExpressionNode *node) {
        if ( !node ) {
            return;
        } else {
            helper( node->getLeft( ) );
            helper( node->getRight( ) );
            delete node;
        }
    }
};

和我的节点标题

class ExpressionNode {
private:
    ExpressionNode* left;
    ExpressionNode* right;
    string data;
public:
    virtual ~ExpressionNode(){
        delete left;
        delete right;
    }
};

现在一切正常,如果在ExpressionTree类中我只会破坏root,但我相信我会以这种方式泄漏内存。这实际上是正确的方式还是我的递归破坏有问题。

1 个答案:

答案 0 :(得分:6)

ExpressionNode析构函数可以充分清理它的记忆,因为它可以摧毁它的孩子,从而充分清理记忆等等。你现在正在做的是双节点;一次由helper()和一次由析构者自己完成。您需要做的就是销毁根节点

virtual ~ExpressionTree(){
    delete root;
}

将通过析构函数删除所有子节点。