У меня всегда возникают проблемы, когда я удаляю все узлы из дерева. Я пытаюсь освободить всю память, выделенную при создании дерева дерева.
Я предполагаю создать функцию 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;