测试题:
struct Trie{
/**
* maxnode: Trie树中最多可能的节点个数 上限为字符串个数 * 最长长度
* sigma_size: 组成字符串的字符种类
* ch: 边
* value: 节点的值
* sz: Trie树的总节点个数
*/
int ch[maxnode][sigma_size];
int value[maxnode];
int sz;
int IDX(char c) {return c - 'a';}
Trie(){
sz = 1;
memset(ch[0],0,sizeof(ch[0]));
}
/**
* 字符串s插入Trie中 值为V
*/
void Insert(char* s,int v){
int u = 0,len = strlen(s);
for(int i = 0;i < len;++i){
int c = IDX(s[i]);
if(!ch[u][c]){
memset(ch[sz],0,sizeof(ch[sz]));
value[sz] = 0;
ch[u][c] = sz++;
}
u = ch[u][c];
}
value[u] = v;
}
/**
* 查找字符串s 返回v
*/
int Search(char* s){
int cur = 0,idx;
while(*s){
idx = IDX(*s);
if(ch[cur][idx] == 0) return -1;
cur = ch[cur][idx];
s++;
}
return value[cur];
}
};