日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[搜索]Trie树的一种实现

發布時間:2025/3/21 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [搜索]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树的一种实现的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。