Trie树模板

#define idx(x) x-'a'; //小写字母 
const int MAXN=1e6; //最大节点数 
struct Trie
{
    int next[26]; //限于小写字母或大写字母 
    int val;
}tree[MAXN];
int nxt,T;

int Add() //分配数组地址 
{
    memset(&tree[nxt],0,sizeof(Trie));
    return nxt++;
}

void Insert(char *s) //插入到字典树 
{
    int rt=0,len=strlen(s);
    for(int i=0;i<len;i++)
    {
        int c=idx(s[i]);
        if(!tree[rt].next[c]) tree[rt].next[c]=Add();
        rt=tree[rt].next[c];
    }
    tree[rt].val++; //数量
}

bool Find(char *s) //查找,改为int返回数量 
{
    int rt=0,len=strlen(s);
    for(int i=0;i<len;i++)
    {
        int c=idx(s[i]);
        if(!tree[rt].next[c]) return false; //或返回0 
        rt=tree[rt].next[c];
    }
    if(tree[rt].val) return true; //或直接返回val 
    return false;
}

void init() //初始化
{
    memset(&tree[0],0,sizeof(Trie));
    nxt=1;
}

    原文作者:Trie树
    原文地址: https://blog.csdn.net/wl16wzl/article/details/79251296
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞