Trie 예시
#include<cstdio>
#include<cstdlib>
#include<cstring>
struct NodeTrie{
int count;
NodeTrie *chld[26];
};
NodeTrie* getNodeTrie(){
NodeTrie *p = (NodeTrie *)malloc(sizeof(NodeTrie));
p->count = 0;
for(int i=0; i<26; i++) p->chld[i] = NULL;
return p;
}
void addTrie(NodeTrie *p, char *s){
int l = strlen(s);
int i, c;
for(i=0;i<l;i++){
c = s[i] - 'a';
if(p->chld[c] == NULL){
p->chld[c] = getNodeTrie();
}
p = p->chld[c];
}
(p->count)++;
}
int countTrie(NodeTrie *p, char *s){
int l = strlen(s);
int i, c;
for(i=0;i<l;i++){
c = s[i] - 'a';
if(p->chld[c] == NULL){
return 0;
}
p = p->chld[c];
}
return p->count;
}
void clearTrie(NodeTrie *p){
if(p == NULL){
return;
}
int i;
for(i=0;i<26;i++){
clearTrie(p->chld[i]);
}
free(p);
}
int main(){
NodeTrie *root = getNodeTrie();
addTrie(root, "ab");
addTrie(root, "abc");
addTrie(root, "ab");
addTrie(root, "abcd");
addTrie(root, "bac");
printf("%d\n", countTrie(root, "ab"));
printf("%d\n", countTrie(root, "a"));
printf("%d\n", countTrie(root, "bac"));
printf("%d\n", countTrie(root, "ba"));
printf("%d\n", countTrie(root, "abcd"));
clearTrie(root);
return 0;
}