字典树

trie树

又称单词查找树,Trie树,是一种树形结构,是一种哈希树的变种。典型应用是用于统计,排序和保存大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计。它的优点是:利用字符串的公共前缀来减少查询时间,最大限度地减少无谓的字符串比较,查询效率比哈希树高。

每一个节点都有26个子节点,t数组代表节点的子节点的编号,如果是0就代表没有那个子节点。

int t[maxn][26],cnt;

bool isw[maxn];     //标记节点是否是尾节点

void insert(char *s,int rt)     //或者string s
{
    for(int i = 0; s[i]; i++)
    {
        int x = s[i]-'a';
        if(t[rt][x] == 0)
        {
            t[rt][x] = ++cnt;       //不存在这个节点就建立这个节点
        }
        rt = t[rt][x];
    }
    isw[rt] = 1;        //标记这个是单词结尾
}

bool find(char *s,int rt)       //查询是否存在这个字符串
{
    for(int i = 0; s[i]; i++)
    {
        int x = s[i]-'a';
        if(t[rt][x] == 0) return false;
        rt = t[rt][x];
    }
    return true;
}

例题:hdu 1251

原文地址:https://www.cnblogs.com/hezongdnf/p/13384351.html