字典树建立的一般方法

字典树的一般方法:写着留着看...........不喜勿喷............
(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;
}

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


            
阅读更多
文章标签: struct null delete
个人分类: 字典树 模版
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭