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
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞

发表评论

电子邮件地址不会被公开。 必填项已用*标注