我有一个二进制搜索树,如下面的代码所示。例如,在程序的开头,我为一个树实例和一些节点动态分配了内存。
如何正确删除所有节点以及我应该为此更好地编写哪些析构函数?
TreeNode.h:
class TreeNode {
private:
unsigned __int64 _id;
string _data;
public:
TreeNode *left;
TreeNode *right;
TreeNode *parent;
TreeNode(const string &str);
TreeNode();
~TreeNode();
};
TreeNode.cpp
TreeNode::TreeNode(const string &str) {
left = nullptr;
right = nullptr;
parent = nullptr;
_data = str;
_id = (unsigned __int64)this;
cout << "\n_id=" << _id << "; \"this\"=" << hex << this << dec << endl;
cout << "Node initialized" << endl;
}
TreeNode::TreeNode() {
left = nullptr;
right = nullptr;
parent = nullptr;
_data = "";
_id = (unsigned __int64)this;
}
TreeNode::~TreeNode() {
//don't know how to implement
}
tree.h中:
class Tree {
public:
TreeNode *root;
Tree();
Tree(TreeNode *node);
~Tree();
};
Tree.cpp:
Tree::Tree() {
root = nullptr;
}
Tree::Tree(TreeNode *node) {
root = node;
}
Tree::~Tree() {
//don't know how to implement
}
答案 0 :(得分:3)
对于节点本身,您没有为节点的任何成员分配任何内存,因此不需要在那里使用析构函数。默认就足够了。
您的实际树析构函数必须处理指针。那些占用内存所以必须删除它们。您处理每个节点的算法应如下:
在Tree的析构函数调用的辅助函数的帮助下,这应该更好地完成。