TRIE树


题目简述:给你n个字符串,实现插入与查询出现多少次操作
原理:用树模拟字符串存储


含泪鼠绘精美例图(下图)

如图所示,右边是要存的字母,左边是存的效果图
我们需要定义一个son[id][]来存储id点的子节点,如果该节点不存在就创建一个
然后再从子节点进行同样的操作直到存储完毕,在末尾处打个标记以防找到未被出现的字符串;
寻找同理,如果搜的节点不存在,直接打断


代码如下

#include 
#define QWQ 0
#define N 100010
using namespace std;
int son[N][26],cnt[N],x;
void insert(char str[])//插入
{
	int p=0;
	for(int i=1;str[i];i++)
	{
		int u=str[i]-'a';//将其处理为数字
		if(!son[p][u]) x++,son[p][u]=x;
		p=son[p][u];
	}
	cnt[p]++;
	
}
int output(char str[])//输出
{
	int p=0;
	for(int i=1;i<=str[i];i++)
	{
		int u=str[i]-'a';
		if(son[p][u]==0) return 0;
		p=son[p][u];
	}
	return cnt[p];
}
int main()
{
	int n;
	memset(cnt,0,sizeof(cnt));
	cin>>n;
	for(int i=1;i<=n;i++)
	{
		char a;
		char b[N];
		cin>>a>>b;
		if(a=='I') insert(b);
		if(a=='Q')
		{
			cout<

经典例题:洛谷P2580 于是他错误的点名开始了