字典树建立的一般方法

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

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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值