基本前缀树实现问题

时间:2011-06-14 18:42:04

标签: data-structures trie prefix-tree

我已经实现了一个基本的前缀树或“trie”。 trie由以下节点组成:

// pseudo-code
struct node {
    char c;
    collection<node> childnodes;
};

假设我将以下字词添加到我的特里:“Apple”,“Ark”和“Cat”。现在当我查找像“Ap”和“Ca”这样的前缀时,我的trie的“bool containsPrefix(string prefix)”方法将正确返回true。

现在我正在实现方法“bool containsWholeWord(string word)”,它将为“Cat”和“Ark”返回true,但对于“App”返回false(在上例中)。

trie中的节点是否常见某种“endOfWord”标志?这有助于确定正在查找的字符串是否实际上是输入到trie中的整个单词而不是只是一个前缀。

干杯!

2 个答案:

答案 0 :(得分:2)

密钥的结尾通常通过叶节点指示。之一:

  • 子节点为空;或
  • 你有一个分支,有一个密钥前缀和一些子节点。

您的设计没有叶/空节点。尝试使用例如一个空。

答案 1 :(得分:1)

如果您需要同时存储“App”和“Apple”,而不是“Appl”,那么是的,您需要类似endOfWord标志的内容。

或者,您可以通过(有时)具有两个具有相同字符的节点将其放入您的设计中。所以“Ap”必须是子节点:叶节点“p”和带有子节点“l”的内部节点“p”。