[搜索]Trie树的一种实现
生活随笔
收集整理的這篇文章主要介紹了
[搜索]Trie树的一种实现
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
trie樹也叫字典樹,搜索樹等。
如圖所示
下面是用stl 的map來實現
class trie_item_c { public:trie_item_c(){}trie_item_c(const char nm){name = nm;}void set_name(const char nm){name = nm;}trie_item_c * get_child(const char nm){map<const char ,trie_item_c*>::const_iterator it = children.find(nm);if(it != children.end())return it->second;else{trie_item_c *cld = new trie_item_c(nm);children.insert(pair <const char ,trie_item_c*>(nm,cld));return cld;}}bool find(const char* dic){if(!dic || *dic == '\0'){if(children.end() != children.find('\0'))return true;return false;}const char* temp = dic;map<const char ,trie_item_c*>::const_iterator it = children.find(*temp);if(it == children.end())return false;return it->second->find(++temp);}void print(){printf("%c",name);map<const char ,trie_item_c*>::const_iterator it = children.begin();for(;it != children.end();it++){it->second->print();}printf("\n");}virtual ~trie_item_c(){map<const char ,trie_item_c*>::const_iterator it = children.begin();while(it != children.end()){delete it->second;children.erase(it);it = children.begin();}} private:map<const char ,trie_item_c*> children;char name;};下面代碼是構建樹的過程
for(const char* dic = lst.first_string();dic;dic = lst.next_string()){trie_item_c *temp = root;for(int i=0;i<str_temp.str_len();i++){char c = str_temp.get(i);trie_item_c *item = temp->get_child(c);temp = item;}//add one null childtemp->get_child('\0');}判斷一個單詞是否在root中,只需要調用root->find("book");即可。
總結
以上是生活随笔為你收集整理的[搜索]Trie树的一种实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 判断一个字符串的所有字符是否都在另一个字
- 下一篇: [搜索]一种改进的召回率准确率公式计算方