我已经实现了一个基本的前缀树或“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中的整个单词而不是只是一个前缀。
干杯!
答案 0 :(得分:2)
密钥的结尾通常通过叶节点指示。之一:
您的设计没有叶/空节点。尝试使用例如一个空。
答案 1 :(得分:1)
如果您需要同时存储“App”和“Apple”,而不是“Appl”,那么是的,您需要类似endOfWord
标志的内容。
或者,您可以通过(有时)具有两个具有相同字符的节点将其放入您的设计中。所以“Ap”必须是子节点:叶节点“p”和带有子节点“l”的内部节点“p”。