trie(字典树)

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应该不能按层遍历把

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值