一道简单的Trie树应用,没什么难的
主要是理解一下建树过程和查找过程
/*
经典trie树(字典树)问题
给出n个字符串后
询问m次 每次询问输入一个字符串str
输出为原来n个字符串里面有多少个是以str作为前缀的字符串
*/
#include<iostream>
#include<cstdio>
using namespace std;
struct node
{
int num;
node *chi[26];
node()
{
num=0;
for(int i=0; i<26; i++)
chi[i]=NULL;
}
}*root;
void InsertTrie(char str[])//trie树插入
{
node *temp=root;//每个单词创建一棵trie树,根节点没有赋值
for(int i=0; str[i]; i++)
{
int j=str[i]-'a';
if(temp->chi[j]==NULL)//如果temp节点没有chi[j]子节点
temp->chi[j]=new node;//创建一个跟node同类型的子节点
temp=temp->chi[j];//,每个子节点向上移一层
temp->num++;
}
}
int SearchTrie(char str[])//trie树查找
{
node *temp=root;
for(int i=0; str[i]; i++)
{
int j=str[i]-'a';
if(temp->chi[j]==NULL)return 0;
temp=temp->chi[j];
}
return temp->num;
}
int main()
{
int n;
char str[15];
while(~scanf("%d",&n))
{
root=new node;
while(n--)
{
scanf("%s",str);
InsertTrie(str);
}
int m;
scanf("%d",&m);
while(m--)
{
scanf("%s",str);
printf("%d\n",SearchTrie(str));
}
}
return 0;
}

本文介绍了一个Trie树(字典树)的经典应用案例:如何快速查找一组字符串中以特定字符串作为前缀的所有字符串数量。文章通过C++代码实现Trie树的构建、插入和搜索功能。
2714

被折叠的 条评论
为什么被折叠?



