一.什么是字典树
Trie 树,即字典树,是一种树形结构。典型应用是用于统计和排序大量的字符串前缀来减少查询时间,最大限度地减少无谓的字符串比较。
Trie 树的核心思想是空间换时间。利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的。
二.字典树的性质
1.根节点不包含字符,除根节点外每一个节点都只包含一个字符。
2.从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串。
3.每个节点的所有子节点包含的字符都不相同。
cnt[]为该树上节点对应的深度(字符串的长度)
idx为树中结点数目
t[p][c]为p结点存储字符'c'的孩子结点下标 用于树的搜索
void insert(char str[]) {
int p = 0, len = strlen(str);
int c;
for (int i = 0; i < len; i++) {
c = getnum(str[i]);//将字符转换为数字 方便查询
if (!t[p][c]) //无该节点则建立
t[p][c] = ++idx;
p = t[p][c];}
cnt[p]++;
}
int find(char str[]) {
int p = 0, len = strlen(str);
for (int i = 0; i < len; i++) {
int c = getnum(str[i]);
if (!t[p][c])
return 0;
p = t[p][c];
}
return cnt[p];
}