hdu 1247 Hat’s Words (字典樹模板)
//那個單詞是有出現的兩個單詞構成的
# include
# include
# include
# include
# define MAX 26
using namespace std;
typedef struct Trie_Node
{
bool isWord;
struct Trie_Node *next[MAX];
} Trie;
char s[50000][50];
void insert(Trie *root,char *word)//生成字典樹
{
Trie *p=root;
while(*word!='\0')
{
if(p->next[*word-'a']==NULL)
{
Trie *temp=(Trie*)malloc(sizeof(Trie));
for(int i=0; inext[i]=NULL;
}
temp->isWord=false;
p->next[*word-'a']=temp;
}
p=p->next[*word-'a'];
word++;
}
p->isWord=true;
}
bool search(Trie *root,char *word)//查找單詞是否存在
{
Trie *p=root;
for(int i=0; word[i]!='\0'; i++)
{
if(p==NULL||p->next[word[i]-'a']==NULL)
return false;
p=p->next[word[i]-'a'];
}
return p->isWord;
}
void del(Trie *root)//釋放空間
{
for(int i=0; inext[i]!=NULL)
{
del(root->next[i]);
}
}
free(root);//釋放malloc申請的空間
}
int main()
{
int i,j;
int count=0;
char str[50];
Trie *root=(Trie*)malloc(sizeof(Trie));
for(i=0; inext[i]=NULL;
}
root->isWord=false;
while(~scanf("%s",str))
{
strcpy(s[count++],str);
insert(root,str);
}
for(i=0; i