字典树的一般方法:写着留着看...........不喜勿喷............
(1)建立起一个链表。
(1)建立起一个链表。
struct node
{
int count;/*数据域*/
struct node *next[26];/*指针域,26个只是表示小写英文字母,如果还要其他的字符则需要继续开大数组*/
};
(2)建立起头节点
struct node *root;
(3)新建节点,为字典树作准备
1.由于是新建,则需要开辟内存 struct node *p=(struct node *)malloc(sizeof(struct node));
p->next[s[i]-'a']=NULL;
(4)建立字典树
1.由于已经新建好了节点,则不需要继续开辟内存。(继续很可能开会超内存,亲身体验)
2.开辟过就不需要开辟,这也是字典树的好处,利于计算前缀;
如果要计算前缀不要忘记将计数器初始化 if(p->next[s[i]-'a']!=NULL)
{
p=p->next[s[i]-'a'];
}
3.如果没有开辟过,则利用节点连接,开辟空间
if(p->nest[s[i]-'a']==NULL)
{
p->next[s[i]-'a']=newset();
}
释放内存:
int dele(node* T) { int i; for(i=0;i<10;i++) { if(T->next[i]!=NULL) dele(T->next[i]); } delete T; return 0; }
int del(node *t) { int i; if(t==NULL) return 0; for(i=0;i<10;i++) { if(t->next[i]!=NULL) { del(t->next[i]); } } free(t); return 0; }
......... ................................完成.............................................