第一次做字典树的题目,在网上找了点字典树的知识,把它ac了。。留着以后多巩固巩固。
#include<iostream>
#include<cstdio>
#include<cstring>
#include <string>
#include <algorithm>
#define MAX 10
using namespace std;
char x[11];
bool ans;
struct tree
{
bool cmp;
tree * next[11];
};
void creattree(tree * it,char * q)
{
tree * p=it;
while((*q)!='\0')
{
if (p->next[(*q-'0')]==nullptr)
{
tree * xin=new tree;
xin->cmp=false;
for (int number=0; number<MAX; number++)
{
xin->next[number]=nullptr;
}
p->next[(*q-'0')]=xin;
}
if (p->cmp)
{
ans=true;
}
p=p->next[(*q-'0')];
q++;
}
p->cmp=true;
for (int number=0;number<MAX;number++)
{
if (p->next[number]!=nullptr)
{
ans=true;
break;
}
}
}
void Delete(tree * it)
{
for (int number=0;number<MAX;number++)
{
if (it->next[number]!=nullptr)
{
Delete(it->next[number]);
}
}
delete it;
}
int main()
{
int n;
cin>>n;
while(n--)
{
int num;
cin>>num;
tree * head=new tree;
head->cmp=false;
ans=false;
for (int number=0;number<MAX;number++)
{
head->next[number]=nullptr;
}
for (int number=0;number<num;number++)
{
scanf("%s",x);
creattree(head,x);
}
if (ans)cout<<"NO"<<endl;
else
{
cout<<"YES"<<endl;
}
Delete(head);
}
return 0;
}