trie树:用来快速存储和查找字符串集合的一个数据结构.
字符串要么都是小写字母,要么都是大写字母,要么是大写字母,要么是数字,要么是0和1。
trie树可以高效查找整个单词在集合中是否出现过,出现多少次。
Trie节点需要有个标志位判断是否是结尾,还需要定义多叉树。
struct Trie{
bool isEnd;
Trie* next[26];
Trie(){
isEnd = false;
memset(next,0,sizeof(next));
}
};
操作:创建节点
Trie * createNode(){
Trie *node=new Trie;
node->isEnd=false;
memset(node->next,0,sizeof(node->next));
return node;
}
操作:插入
void insert(Trie* root,string word){
Trie* node=root;
for(char c:word){
if(node->next[c-'a']==NULL){
node->next[c-'a']=createNode();
}
node=node->next[c-'a'];
}
node->isEnd=true;
}
操作:搜索
bool search(Trie*root,string word){
Trie* node=root;
for(char c:word){
if(node==NULL)return false;
node=node->next[c-'a'];
}
return node->isEnd;
}
操作:删除
void deleteTrie(Trie* node){
if(node){
for(int i=0;i<26;i++){
deleteTrie(node->next[i]);
}
delete node;
}
}