关于如何理解Trie(字典树模板)
void insert(char str[])
{
int p = 0;
for (int i = 0; str[i]; i )
{
int u = str[i] - ‘a’;
if (!son[p][u]) son[p][u] = idx;
p = son[p][u];
}
cnt[p] ++ ;
cout<<p<<endl;
}
1.idx代表当前插入到了哪一层,指向数组中的一维变量
2.关于cnt数组的具体含义,每一个cnt[i]都对应一个相应且唯一的idx(相当于编号),idx自增所以cnt[i]唯一。
2.插入方法和模拟单链表的方法极其相似,建议多对比一下,或者手动模拟,以下是我手动模拟的结果
insert(“abcbc”);//idx=5
//cnt[5]=1 代表以’c’结尾,且编号为5的字符串有一个
insert(“abvkc”);//idx=8
//cnt[8]=1 代表以’c’结尾,且编号为8的字符串有一个
以下是打表结果:
大家可以详细观察一下,以上说法可能有不太恰当的地方,敬请指出,菜狗第一次做分享,%%%%%%,欢迎各位佬指出错误。