【笔记】字典树

字典树(Trie树、字母数、前缀树)

作用

一般是存储单词(以下操作仅限于小写单词树)

优点

共用前缀,省空间,查询快

Trie树的应用

(1) 字符串检索
 (2) 字符串最长公共前缀

支持操作

询问单词
插入单词
删除单词

操作工具

一棵树,用ch[u][i]表示u节点的i号儿子(i唯一的确定了一个从a到z的字母)的编号,相当于指针
一个单词,用于插入或询问是否在树
bool类型的if_end[u],表示u节点存储的是否为一整个单词

边和节点

边存的是字母,节点存的是从根到此节点经过路径所连成的单词
根节点啥也没有

插入

void insert(char *s)
{
    int len = strlen(s);
    int u = 1;//根
    for(int i=0;i<len;i++)
    {
        int c = s[i]-'a';
        if(ch[u][c]==0)
            ch[u][c]=++tot;//tot节点总数
        u = ch[u][c];
    }
    bo[u] = 1;
}

查询

bool find(char *s)
{
    int u = 1;
    int len = strlen(s);
    for (int i = 0; i < len; i++)
    {
        int c = s[i] - 'a';
        if(!ch[u][c])
            return 0;
        u = ch[u][c];
    }
    return true;
}
####删除
···
##做题时注意分类讨论
###其实Trie不仅可以寸单词,还可应用于异或,称之为01字典树
posted @ 2020-01-31 18:39  _Buffett  阅读(138)  评论(0编辑  收藏  举报