字典树

312 阅读1分钟

字典树定义

字典树又叫trie树、前缀树。是一种树形的数据结构,主要用于存储和统计大量的字符串,主要思想是利用字符串的前缀来节省存储空间。字典树主要包含两个操作:插入和查询。

存储方法

使用一个二位数组son[i][j]来存储字典树,表示位置i的下一个字符j的地址。

图解

图片1.png

代码

int son[N][26],cnt[N],idx=1;//idx=0时设置为根节点 不保存值。N为字符串的个数
void insert(string str)//往集合中插入字符串 
{
	int root=0;
	for(int i=0;i<str.size();i++)
	{
		int x=str[i]-'a';//将字符转化为0-25的数字用于方便存储 
		if(!son[root][x]) son[root][x]=idx++;//如果在root下一个字符x未出现过,将其设置新地址。 
		root=son[root][x];//将当前地址改为下一个地址。 
	}
	cnt[root]++;//root为单词结尾地址,将其+1表示单词出现次数+1 
 } 
int query(string str)//返回单词出现次数 
{
	int root=0;
	for(int i=0;i<str.size();i++)
	{
		int x=str[i]-'a';
		if(!son[root][x]) return 0;//字典中没有当前字符串返回0; 
		root=son[root][x];	
	}	
	return cnt[root];
}