【发布时间】:2014-03-26 23:39:43
【问题描述】:
当我从树中删除所有节点时,我似乎总是遇到麻烦。我正在尝试释放我在创建 trie 树时分配的所有内存。
我想创建一个函数 remove_all
只删除“根”就够了吗
类似这样的:
void PrefixStringSet::remove_all(NodePtr node)
{
delete root;
}
或者我必须用这样的方式删除每个节点:
void PrefixStringSet::remove_all(NodePtr node)
{
if(!root)
{
return;
}
remove_all(root->children);
delete root;
}
显然这些都不起作用,否则我不会在这里:)。
其他问题。如果我的析构函数是这样实现的,我是否必须在我的主函数中调用 remove_all 函数
PrefixStringSet::~PrefixStringSet()
{
remove_all(root);
}
或者析构函数会自动删除我创建的树/节点?
编辑
struct TrieNode
{
TrieNode(bool present = false);
bool is_leaf();
bool present;
TrieNode* children[ALPHABET_SIZE];
};
class PrefixStringSet
{
public:
// Creates an empty prefix string set.
PrefixStringSet();
~PrefixStringSet();
bool insert(string s);
bool contains(string s);
private:
NodePtr root;
void remove_all(NodePtr node);
};
typedef TrieNode* NodePtr;
【问题讨论】:
-
你可以为你的 NodePtr 结构/类发布代码吗?