您的位置:首页 > 其它

字典树模板

2016-05-16 12:52 302 查看
struct Trie

{

Trie *next[26];

int v; //根据需要变化

bool flag;

Trie()

{

memset(next,0,sizeof(next));

v=0;

flag=false;

}

};

struct Trie *root;

void createTrie(char *str)

{

int len = strlen(str);

struct Trie *p , *q;

p=root;

for(int i=0; i< len; ++i)

{

int id = str[i]-‘a’;

if(p->next[id] == NULL)

{

p->next[id]=new Trie;

}

p = p->next[id];

p->v++;

}

p->flag=true;//需要标记结尾

}

int findTrie(char *str)

{

int len = strlen(str);

Trie *p = root;

for(int i=0; i< len;i++)

{

int id = str[i]-‘a’;

p = p->next[id];

if(p == NULL) //不存以此串为前缀的串

return 0;

if(p->flag)

return -1 // //字符集中已有串是此串的前缀

}

return p->v ; //该字符串出现的次数

for(int i=0;i<26;i++)

if(p->next[i]!=NULL)

return -1 //此串为某字符的前缀 本身不为本身的前缀

}

void dealTrie(Trie* T)

{

T=root;

int i;

if(T==NULL)

return 0;

for(i=0;i< MAX;i++)

{

if(T->next[i]!=NULL)

deal(T->next[i]);

}

free(T);

}

“`
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: