#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;
}
创建字典树模板
最新推荐文章于 2023-10-07 21:46:57 发布