當我從樹上刪除所有節點時,我似乎總是陷入麻煩。我試圖釋放所有在創建特里樹時分配的內存。刪除特里樹的所有內容
我想創建一個函數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;
}
很明顯,這些都沒有工作,或者我wouldn在這裏:)。
其他問題。我必須調用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結構/類嗎? –
檢查編輯, – user3265963