字典树【Trie】
字典树【Trie】
一种能够快速插入和查询字符串的多叉树结构
节点的编号各不相同,根节点编号为0,其它节点用来标识路径,还可以标记单词插入的次数。边标识字符
Tier维护字符串的集合,支持2种操作:
- 向集合中拆入一个字符串, void insert(char c)
- 向集合中查询一个字符串,int query(char c)
建字典树
儿子数组 cha[p][j]:存储从节点 p 沿着 j 这条边走到的子节点
- 边为26个小写字母(a-z)对应的映射值为:0 - 25
- 每个节点最多可以有 26 个分叉
例如:ch[0][2] = 1,ch[1][0] = 2,ch[2][19] = 3
计数数组 cnt[p] 存储以节点 p 结尾的单词的插入次数
节点编号 index:用来给节点编号
注意事项
- 空 Trie 仅有一个 root 节点,编号为 0
- 从 root 节点开始插,枚举字符串的每个字符
- 如果有儿子,则 p 指针走到儿子
- 如果没有,则先创建儿子,p 指针再走到儿子
- 在单词结束点记录插入次数