fork download
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct TrieNode {
  5. TrieNode *children[26]{};
  6. bool isWord;
  7. TrieNode(): isWord(false) {} /* to be deleted */
  8. void display(string s) {
  9. cout <<"<"<<s<<"> " << (isWord ?"is":"isn't")<<" a word:";
  10. for (int i=0; i<26; i++)
  11. if (children[i])
  12. cout << static_cast<char>('a'+i);
  13. cout<<endl;
  14. for (int i=0; i<26; i++)
  15. if (children[i])
  16. children[i]->display (s+static_cast<char>('a'+i));
  17. }
  18. };
  19.  
  20. void buildTree(TrieNode *root, string word) {
  21. TrieNode *cur = root;
  22. for (char c : word) {
  23. if (!cur->children[c-'a'])
  24. cur->children[c-'a'] = new TrieNode();
  25. cur = cur->children[c-'a'];
  26. }
  27. cur->isWord = true;
  28. }
  29. int main() {
  30. TrieNode t;
  31.  
  32. buildTree(&t, "test");
  33. buildTree(&t, "tesla");
  34. buildTree(&t, "tesa");
  35.  
  36. t.display("");
  37. return 0;
  38. }
Success #stdin #stdout 0s 15240KB
stdin
Standard input is empty
stdout
<> isn't a word:t
<t> isn't a word:e
<te> isn't a word:s
<tes> isn't a word:alt
<tesa> is a word:
<tesl> isn't a word:a
<tesla> is a word:
<test> is a word: