字典树建立的一般方法

来源:互联网 发布:淘宝女生衣服店铺 编辑:程序博客网 时间:2024/05/16 16:58
字典树的一般方法:写着留着看...........不喜勿喷............
(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;}

......... ................................完成.............................................

	
				
		
原创粉丝点击