字典树,照模板写的。。。。。
#include<stdio.h>
#include<stdlib.h>
#include<string.h>
char arr[20];
typedef struct Trie{
int v;
Trie *next[10];
}Trie;
Trie *root;
void createTrie(char *s){
Trie * p = root, *q;
int len = strlen(arr);
for(int i = 0;i < len; i++){
int id = s[i] - '0';
if (p -> next[id] == NULL){
Trie *q = new Trie;
q -> v = 1;
for(int j = 0;j < 10; j++)
q -> next[j] = NULL;
p -> next[id] = q;
p = p -> next[id];
}
else{
p -> next[id] -> v++;
p = p -> next[id];
}
}
p -> v = -1;
}
int findTrie(char *s){
Trie *p = root;
int len = strlen(s);
for(int i = 0;i < len; i++){
int id = s[i] - '0';
p = p -> next[id];
if (p == NULL)
return 0;
if (p -> v == -1)
return -1;
}
return -1;
}
int deal(Trie *T){
if (T == NULL)
return 0;
for(int i = 0;i < 10; i++){
if(T -> next[i] != NULL)
deal(T -> next[i]);
}
free(T);
return 0;
}
int main(){
int n, flag;
scanf("%d", &n);
while (n--){
flag = 0;
root = (Trie*)malloc(sizeof(Trie));
// Trie *root = new Trie;
for(int i = 0;i < 10; i++)
root -> next[i] = NULL;
int m;
scanf("%d", &m);
for(int i = 0;i < m; i++){
scanf("%s", arr);
if (findTrie(arr) == -1)
flag = 1;
if(flag)
continue;
createTrie(arr);
}
if (flag)
printf("NO\n");
else
printf("YES\n");
deal(root);
}
return 0;
}