#include <iostream>
using namespace std;
struct TrieNode {
TrieNode * children[ 26 ] { } ;
bool isWord;
TrieNode( ) : isWord( false ) { } /* to be deleted */
void display( string s) {
cout << "<" << s<< "> " << ( isWord ? "is" : "isn't" ) << " a word:" ;
for ( int i= 0 ; i< 26 ; i++ )
if ( children[ i] )
cout << static_cast < char > ( 'a' + i) ;
cout << endl;
for ( int i= 0 ; i< 26 ; i++ )
if ( children[ i] )
children[ i] - > display ( s+ static_cast < char > ( 'a' + i) ) ;
}
} ;
void buildTree( TrieNode * root, string word) {
TrieNode * cur = root;
for ( char c : word) {
if ( ! cur- > children[ c- 'a' ] )
cur- > children[ c- 'a' ] = new TrieNode( ) ;
cur = cur- > children[ c- 'a' ] ;
}
cur- > isWord = true ;
}
int main( ) {
TrieNode t;
buildTree( & t, "test" ) ;
buildTree( & t, "tesla" ) ;
buildTree( & t, "tesa" ) ;
t.display ( "" ) ;
return 0 ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKc3RydWN0IFRyaWVOb2RlIHsKICAgIFRyaWVOb2RlICpjaGlsZHJlblsyNl17fTsKICAgIGJvb2wgaXNXb3JkOwogICAgVHJpZU5vZGUoKTogaXNXb3JkKGZhbHNlKSB7fSAgLyogdG8gYmUgZGVsZXRlZCAqLwogICAgdm9pZCBkaXNwbGF5KHN0cmluZyBzKSB7IAogICAgCWNvdXQgPDwiPCI8PHM8PCI+ICIgPDwgKGlzV29yZCA/ImlzIjoiaXNuJ3QiKTw8IiBhIHdvcmQ6IjsgCiAgICAJZm9yIChpbnQgaT0wOyBpPDI2OyBpKyspIAogICAgCSAgICBpZiAoY2hpbGRyZW5baV0pIAogICAgCSAgICAgICAgY291dCA8PCBzdGF0aWNfY2FzdDxjaGFyPignYScraSk7IAogICAgCWNvdXQ8PGVuZGw7IAogICAgCWZvciAoaW50IGk9MDsgaTwyNjsgaSsrKSAKICAgIAkgICAgaWYgKGNoaWxkcmVuW2ldKSAKICAgIAkgICAgICAgIGNoaWxkcmVuW2ldLT5kaXNwbGF5IChzK3N0YXRpY19jYXN0PGNoYXI+KCdhJytpKSk7IAogICAgfQp9OwoKdm9pZCBidWlsZFRyZWUoVHJpZU5vZGUgKnJvb3QsIHN0cmluZyB3b3JkKSB7CiAgICBUcmllTm9kZSAqY3VyID0gcm9vdDsKICAgIGZvciAoY2hhciBjIDogd29yZCkgewogICAgICAgIGlmICghY3VyLT5jaGlsZHJlbltjLSdhJ10pCiAgICAgICAgICAgIGN1ci0+Y2hpbGRyZW5bYy0nYSddID0gbmV3IFRyaWVOb2RlKCk7CiAgICAgICAgY3VyID0gY3VyLT5jaGlsZHJlbltjLSdhJ107CiAgICB9CiAgICBjdXItPmlzV29yZCA9IHRydWU7Cn0KaW50IG1haW4oKSB7CglUcmllTm9kZSB0OyAKCQoJYnVpbGRUcmVlKCZ0LCAidGVzdCIpOwoJYnVpbGRUcmVlKCZ0LCAidGVzbGEiKTsKCWJ1aWxkVHJlZSgmdCwgInRlc2EiKTsKCQoJdC5kaXNwbGF5KCIiKTsgCglyZXR1cm4gMDsKfQ==