son[p][2]中的p的含义:
不是trie树的第几层数,而是第几个节点(idx)
所以在初始化son[N][M]的时候,N表示节点数,M表示每个节点有几种出边的情况(比如说是小写字母就是26种情况,若为二进制中0和1就是两种情况)
也就是son[p][2]表示第p个节点的数据
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] ++ ;
}
一开始son[p][u]=++idx ,后来又把son[p][u]赋值给p
也就是p就是idx ,代表的是第几个点而不是层数(区别于bfs和dfs里的那个树)
我一开始想当然的把p以为是树的层数,然后拿去遍历,就很离谱,所以trie应该不能按层遍历把