一、定义与用途
高效存储和查找字符串字符串集合的数据结构
这是一种树形数据结构,用空间换时间,利用字符串相同的前缀降低算法复杂度。
常用的操作有插入和查询。
下图展示了字典树结构和建立方法:
创建一颗Tire树的方法就是,从树根开始查找,如果没有当前字符,创建一个子结点,如果有,继续向下查找,依次向下。
二、操作方法和代码
#include<iostream>
#include<string>
using namespace std;
const int N=100010;
int son[N][26];//26代表a到z,如果为空就是没有,非空就是有
int cnt[N];//以当前这个点结尾的单词有多少个
int idx;//当前用到了第几个结点,下标为0的点,既是根结点,又是空结点。
void Insert(char a[])
{
int p=0;
for(int i=0;a[i];i++)
{
int u=a[i]-'a';
if(!son[p][u])son[p][u]=++idx;//没查到就新建
p=son[p][u];
}
cnt[p]++;
return ;
};
void query(char a[])
{
int p=0;
for(int i=0;a[i];i++)
{
int u=a[i]-'a';
if(!son[p][u]){cout<<"Not Found";return;}
p=son[p][u];
}
cout<<"Found";return;
}
int main()
{
return 0;
}