How to print all words in a Trie?

theUser picture theUser · Dec 3, 2012 · Viewed 16.2k times · Source

I am trying to create a Trie Implementation in C++. I cannot figure out how to print all words stored in the Trie.

This is how I've implemented the TrieNode.

struct TrieNode{
  bool isWord;
  int data; //Number of times Word Occured
  TrieNode *Child[ALPHABET_SIZE]; //defined as 26
};

I know I could store a pointer to the parent node, Depth-First Search for all nodes where isWord==True and recursively print each word from those nodes.

But I'm wondering is there a way to print out each word in the Trie with my implementation of a TrieNode.

Thanks for any help.

Answer

Yakk - Adam Nevraumont picture Yakk - Adam Nevraumont · Dec 3, 2012

Here is a reasonably efficient version of Konrad Rudolph, without assuming data is a character. I also removed the O(n^2) total memory allocated in Konrad's version at the cost of using a std::string&. The idea is to pass down the prefix and modify it at each recursion, pushing characters onto the end and poping it afterwards, ends up being slightly more efficient than copying it madly.

void traverse(std::string& prefix, TrieNode const& node) {
  if (node.isWord)
    print(prefix);

  for (char index = 0; index < ALPHABET_SIZE; ++index) {
    char next = 'a'+index;
    TrieNode const* pChild = node.Child[index];
    if (pChild) {
      prefix.push_back(next);
      traverse(prefix, *pChild);
      prefix.pop_back();
    }
  }
}