前缀树又称字典树
结构体实现
struct trie{
trie *next[26];
int val;
trie(){
for(int i=0;i<=25;i++)
next[i]=NULL;
val=0;
}
};
插入
void inseert(trie *root,char *s){
trie *p=root;
int lens=strlen(s);
for(int i=0;i<lens;i++){
int c=s[i]-'a';
if(p->next[c]==NULL)
p->next[c]=new trie;
p=p->next[c];
p->val++;
}
//p->val++;
}
查找
int search(trie *root,char *s){
trie *p=root;
int lens=strlen(s);
for(int i=0;i<lens;i++){
int c=s[i]-'a';
if(p->next[c]==NULL)return 0;
else p=p->next[c];
}
return p->val;
}
释放空间(一般不用,时间复杂度太高)
void freetrie(trie *root){
if(root==NULL)return ;
for(int i=0;i<=25;i++){
if(root->next[i]!=NULL)
freetrie(root->next[i]);
}
free(root);
}