c++ - 如何打印 Trie 中的所有单词?

标签 c++ data-structures trie

我正在尝试用 C++ 创建一个 Trie 实现。我不知道如何打印存储在 Trie 中的所有单词。

这就是我实现 TrieNode 的方式。

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

我知道我可以存储一个指向父节点的指针,深度优先搜索所有isWord==True 的节点并递归地打印这些节点中的每个单词。

但我想知道是否有一种方法可以通过我实现的 TrieNode 打印出 Trie 中的每个单词。

感谢您的帮助。

最佳答案

这是 Konrad Rudolph 的一个相当有效的版本,没有假设数据是一个字符。我还以使用 std::string& 为代价删除了 Konrad 版本中分配的 O(n^2) 总内存。这个想法是传递前缀并在每次递归时修改它,将字符推到最后并在之后弹出它,最终比疯狂复制它稍微高效一些。

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();
    }
  }
}

关于c++ - 如何打印 Trie 中的所有单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13685687/

相关文章:

java - 二叉搜索树差异键之和

c++ - 如何使用给定特定前缀的 vector 打印出 Trie 中的单词

f# - F# 中的不可变 Trie 结构

algorithm - 后缀树 VS 尝试 - 用简单的英语来说,有什么区别?

c++ - 生成库的多个实例的 Makefile

c++ - 默认声明的属性? (状态设计模式)

c - 我的这段 C 代码有什么错误?这是一个需要使用FILE处理和BST的图书馆目录

使用数组的循环队列操作

c++ - std::shared_ptr<T>:指向 T 的右值指针的隐式构造函数

c++ - 错误: no matching function for call to 'std::vector<Pet*>::vector(<brace-enclosed initializer list>)'