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];
}
}
参考: