字典树(模板

Posted liuxiangyu666

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字典树(模板相关的知识,希望对你有一定的参考价值。

学完字典树后
    还是背不住模板…………介绍写在代码里————


struct Trie
    ll ch[N][26],sz,val[N];
    //val为附加信息
    //这里的ch数组,第二维的大小为26是因为字符串只由小写字母构成,第二维的大小一般是由字符串的组成决定
    //sz即为节点编号 
    Trie()
        sz=1;//一开始的时候只有根节点这一个节点 
        memset(ch[0],0,sizeof(ch[0]));
        memset(val,0,sizeof(val));
    //这里是初始化 
    ll idx(char c)return c-‘a‘;//返回字符c的编号 
    void insert(char *s,ll v)
    //插入操作 ,这里是整份代码中唯一用到指针的地方,因为函数是放在结构体里面 ,所以最好用个指针,其实等价于char s[] 
    //s代表要插入的字符串,v为附加信息 
        ll u=0,len=strlen(s+1);
        for(ll i=1;i<=len;i++)
            ll c=idx(s[i]);
            if(!ch[u][c])//如果节点不存在就插入,不然就继续往下遍历 
                memset(ch[sz],0,sizeof(ch[sz]));
                val[sz]=0;//中间的节点是没有附加信息的 
                ch[u][c]=sz++;//新建节点 
            
            u=ch[u][c];//往下遍历 
        
        val[u]=v;//插入附加信息,注意,我们一般只在叶子节点插入附加信息,中间的节点一般是没有附加信息的,因为一个非叶子结点,在Trie中一般都会被不同的单词使用到(定义) 
    
tree;

  

 
 

 

 

 

 

以上是关于字典树(模板的主要内容,如果未能解决你的问题,请参考以下文章

统计难题HDU - 1251map打表或字典树字典树模板

字典树模板

Trie树(字典树)模板

洛谷 P8306 模板字典树

cf842D 01字典树|线段树 模板见hdu4825

模板trie树(字典树)