创建字典树模板

来源:互联网 发布:王者挂机软件 编辑:程序博客网 时间:2024/05/22 06:46
#include<stdio.h>#include<stdlib.h>#include<string.h>#define M 10   //M可以根据可能的请况定义;typedef struct Trie{    Trie *next[M];    int v;   //v可以表示一个字典树到此有多少相同前缀的数目,这里根据需要应当学会自由变化};Trie *root ;void creat(char *str){    int len=strlen(str);    Trie*pb=root,*pt ;   //pb为当前节点,pt为当前节点的下一个节点    for( int i=0;i<len;i++)    {        int id=str[i]-'0';        if(pb->next[id]==NULL)        {            pt=(Trie*)malloc(sizeof(Trie));            pt->v=1;            for ( int j=0;j<M;j++)                pt->next[j]=NULL ;            pb->next[id]=pt ;            pb=pb->next[id] ;        }        else        {            pb->next[id]->v++;   //pb -next[ id ] -> v即为当前节点的下一个节点的v            printf("%d  %d\n",pb->v,pb->next[id]->v);            pb=pb->next[id];        }    }//    pb->v=-1; 标记字符串的结束}int main (){    char a[20];    root=(Trie*)malloc(sizeof(Trie));    root->v=1;    for (int i=0;i<M;i++)        root->next[i]=NULL ;    while(~scanf("%s",a))        creat(a) ;    return 0;}

0 0