【笔记】Trie树


Part 1 简介

Trie,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串。与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中的位置决定。一个节点的所有子孙都有相同的前缀,也就是这个节点对应的字符串,而根节点对应空字符串。一般情况下,不是所有的节点都有对应的值,只有叶子节点和部分内部节点所对应的键才有相关的值。

字典树用边来代表字母,而从根结点到树上某一结点的路径就代表了一个字符串。

Part 2 代码实现

/*
 * @Author: thyzzs
 * @Date: 2019-11-13 15:27:35
 * @LastEditTime: 2019-11-13 16:48:08
 */
struct Trie {
    int nex[1000010][26];
    int num[1000010];
    int pos = 1;
    
    void Insert(char str[]) {
        int p = 0;
        for (register int i = 0; str[i]; i++) {
            int n = str[i] - 'a';
            if (nex[p][n] == 0)
                nex[p][n] = pos++;
            p = nex[p][n];
            num[p]++;
        }
    }
    
    int Find(char str[]) {
        int p = 0;
        for (register int i = 0; str[i]; i++) {
            int n = str[i] - 'a';
            if (nex[p][n] == 0) 
                return 0;
            p = nex[p][n];
        }
        return num[p];
    }
}

参考:

Trie - 维基百科,自由的百科全书


Author: thyzzs
Reprint policy: All articles in this blog are used except for special statements CC BY-NC-SA 4.0 reprint policy. If reproduced, please indicate source thyzzs !
评论
  TOC