From 812adcc20b281dca2a40187d78897f0f086c2064 Mon Sep 17 00:00:00 2001 From: wyy Date: Mon, 24 Jun 2013 14:47:38 +0800 Subject: [PATCH] finished destrop in trie --- Trie.cpp | 33 +++++++++++++++++++++++++++++---- Trie.h | 1 + 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/Trie.cpp b/Trie.cpp index c3e0acf..0d26c68 100644 --- a/Trie.cpp +++ b/Trie.cpp @@ -56,7 +56,16 @@ namespace CppJieba bool Trie::destroy() { - return true; + if(NULL == _root) + { + return false; + } + else + { + bool ret = _destroyNode(_root); + _root = NULL; + return ret; + } } void Trie::display() @@ -82,6 +91,18 @@ namespace CppJieba return p->isLeaf; } + bool Trie::_destroyNode(TrieNode* node) + { + for(TrieNodeHashMap::iterator it = node->hmap.begin(); it != node->hmap.end(); it++) + { + TrieNode* next = it->second; + _destroyNode(next); + } + + delete node; + return true; + } + void Trie::_display(TrieNode* node, int level) { if(NULL == node) @@ -137,12 +158,16 @@ using namespace CppJieba; int main() { Trie trie; - trie.init("test/dict.txt"); - trie.display(); - char * utf = "B"; + //trie.init("test/dict.txt"); + trie.init("dict.txt"); + //trie.display(); + const char * utf = "B"; ChUnicode chUniStr[16]; int uniLen = utf8ToUnicode(utf, sizeof(utf), chUniStr); cout< hmap; //hmap[136]=1; return 0; diff --git a/Trie.h b/Trie.h index 1253fc7..9565c69 100644 --- a/Trie.h +++ b/Trie.h @@ -35,6 +35,7 @@ namespace CppJieba void display(); bool find(const ChUnicode* chUniStr, size_t len); private: + bool _destroyNode(TrieNode* node); void _display(TrieNode* node, int level); bool _insert(const ChUnicode* chUniBuf, size_t len); };