关闭

字典树建立的一般方法

1169人阅读 评论(0) 收藏 举报
字典树的一般方法:写着留着看...........不喜勿喷............
(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;
}

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


   
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:196159次
    • 积分:3735
    • 等级:
    • 排名:第8952名
    • 原创:103篇
    • 转载:12篇
    • 译文:0篇
    • 评论:58条
    文章分类
    最新评论
    友情链接