您的位置:首页 > 其它

字典树模板

2016-09-26 17:49 246 查看
测试题:

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];
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: