#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树模板
原文作者:Trie树
原文地址: https://blog.csdn.net/wl16wzl/article/details/79251296
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
原文地址: https://blog.csdn.net/wl16wzl/article/details/79251296
本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。