您的位置:首页 > 其它

hihoCoder1014 Trie树

2016-10-13 13:18 344 查看
基本的tire树 加上模板

#include<iostream>
#include<math.h>
#include<cstdio>
#include<stdlib.h>
#include<cstring>
using namespace std;
#define MAX 26
typedef  struct tirenode
{

int nCount; // 该节点前缀 出现的次数

struct tirenode *next[MAX];//该节点的后续节点

} tirenode;

int allocp =0;
tirenode *creat()
{
tirenode *tmp=(tirenode*)malloc(sizeof(tirenode));
tmp->nCount=1;
for(int i=0;i<MAX;i++)
tmp->next[i]=NULL;
return tmp;

}
void intsert(tirenode **proot,char *str)
{

tirenode*tmp=*proot;
int i=0,k;
while(str[i])
{
k=str[i]-'a';
if(tmp->next[k])
{
tmp->next[k]->nCount++;
}
else {
tmp->next[k]=creat();
}
tmp=tmp->next[k];
i++;
}
}
int searcht(tirenode*root,char *str)
{

if(root==NULL)
return 0;
tirenode*tmp=root;
int i=0,k;
while(str[i])
{

k=str[i]-'a';
if(tmp->next[k])
{
tmp=tmp->next[k];
}
else return 0;
i++;
}
return tmp->nCount;

}
int main()
{
tirenode *root=creat();
int t;
char s[100100];
scanf("%d%*c",&t);
while(t--)
{
gets(s);
intsert(&root,s);
}
scanf("%d%*c",&t);
while(t--)
{gets(s);

printf("%d\n",searcht(root,s));
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: