字典树的数据结构及基本算法的实现

来源:互联网 发布:淘宝客 微信 系统 编辑:程序博客网 时间:2024/05/17 06:09
#include <iostream>using namespace std;const int branchNum = 26;//声明常量struct Trie_node{bool isStr;//记录此处是否构成一个串。Trie_node* next[branchNum];//指向各个子树的指针,下标0-25代表26字符Trie_node():isStr(false){memset(next,NULL,sizeof(next));}};class Trie{public:Trie();void insert(const char* word);bool search(char* word);void deleteTrie(Trie_node* root);private:Trie_node* root;};Trie::Trie(){root = new Trie_node();}void Trie::insert(const char* word){Trie_node* location = root;while(*word){if(location->next[*word - 'a'] == NULL){//不存在则建立Trie_node* tmp = new Trie_node();location->next[*word - 'a'] = tmp;}location = location->next[*word - 'a']; //每插入一步,相当于有一个新串经过,指针要向下移++word;}location->isStr = true;//到达尾部,标记一个串}bool Trie::search(char* word){Trie_node* location = root;while(*word && location){location = location->next[*word - 'a'];++word;}return (location!=NULL && location->isStr);}void Trie::deleteTrie(Trie_node* root){int i;for(i = 0 ; i < branchNum ; ++i){if(root->next[i] != NULL){deleteTrie(root->next[i]);}}delete root;}int main(){Trie t;t.insert("a");t.insert("abandon");char* c = "abandoned";t.insert(c);t.insert("abashed");if(t.search("abashed")){printf("true\n");}}