您没有使用递归 printAll() 调用的返回值,因此您生成的所有子字都将丢失 . 尝试这样的事情:
string printAll(string word, const Trie& data)
{
string words;
if (data.eow)
words += word + " ";
for (int i = 0; i < 26; i++) {
if (data.letters[i] != NULL)
words += printAll( word + data.letters[i]->letter, *(data.letters[i]));
}
return words;
}
对于它的 Value ,这有点低效,因为它分配了大量的临时字符串 . 每个递归调用都有自己的 words 字符串,它被构建,返回和销毁 . 最好将所有单词添加到一个字符串中 .
您也可以考虑使用单词向量而不是将它们与空格一起添加 . 这样你就可以更容易地迭代每个单词 .
void getWords(const Trie& data, vector &words, string word = "")
{
if (data.eow)
words.push_back(word);
for (int i = 0; i < 26; i++) {
if (data.letters[i] != NULL)
getWords(*(data.letters[i]), words, word + data.letters[i]->letter);
}
}
然后叫它:
vector words;
getWords(trie, words);
for (size_t i = 0; i < words.size(); ++i) {
if (i > 0)
cout << " ";
cout << words[i];
}
cout << endl;