我正在尝试在C++中创建Trie
实现。我不知道如何打印存储在Trie
中的所有单词。
这就是我实现TrieNode
的方式。
struct TrieNode{
bool isWord;
int data; //Number of times Word Occured
TrieNode *Child[ALPHABET_SIZE]; //defined as 26
};
我知道我可以将
pointer
存储到父节点,即深度优先搜索所有节点,其中isWord==True
并递归打印这些节点中的每个单词。但是我想知道是否有一种方法可以实现
Trie
来打印TrieNode
中的每个单词。谢谢你的帮助。
最佳答案
这是Konrad Rudolph的一个相当有效的版本,没有假定数据是字符。我还删除了Konrad版本中分配的O(n ^ 2)总内存,但使用了std::string&
。这个想法是传递前缀并在每次递归中对其进行修改,将字符推到末尾,然后弹出它,这比疯狂复制它的效率更高。
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();
}
}
}