This is my first problem of Trie.
Thanks to http://www.cnblogs.com/dolphin0520/archive/2011/10/15/2213752.html
#include <iostream> #include <cstring> #include <cstdio> #include <string> using namespace std; int t,n; bool ok; string str; struct Trie { Trie *next[10]; bool over; }; void insert(Trie * root ,string str){ int len=str.length(); //cout<<"len="<<len<<endl; Trie * p= root; for(int i=0;i<len;++i){ //cout<<str[i]-'0'<<" "; if(p->next[ str[i]-'0' ] ==NULL){ Trie * temp=new Trie; temp->over=false; for(int j=0;j<10;++j){ temp->next[j]=NULL; } p->next[ str[i]-'0' ]=temp; } if(p->over==true)ok=false; p=p->next[ str[i]-'0' ]; } p->over=true; for(int i=0;i<10;++i){ if(p->next[i]!=NULL) { ok=false; break; } } } void del(Trie * root){ Trie*temp=root; for(int i=0;i<10;++i){ if(temp->next[i]!=NULL){ del(temp->next[i]); } } delete(root); } int main() { cin>>t; while(t--){ //init ok=true; Trie *root=new Trie; root->over=false; for(int i=0;i<10;++i){ root->next[i]=NULL; } //get data cin>>n; while(n--){ cin>>str; insert(root,str); } if(ok)puts("YES"); else puts("NO"); del(root); } return 0; }