Data structures 基本前缀树实现问题

Data structures 基本前缀树实现问题,data-structures,trie,prefix-tree,Data Structures,Trie,Prefix Tree,我已经实现了一个基本的前缀树或“trie”。trie由如下节点组成: // pseudo-code struct node { char c; collection<node> childnodes; }; //伪代码 结构节点{ 字符c; 集合子节点; }; 假设我在trie中添加以下单词:“苹果”、“方舟”和“猫”。现在,当我查找像“Ap”和“Ca”这样的前缀时,trie的“bool containsPrefix(字符串前缀)”方法将正确地返回true 现在我

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

// pseudo-code
struct node {
    char c;
    collection<node> childnodes;
};
//伪代码
结构节点{
字符c;
集合子节点;
};
假设我在trie中添加以下单词:“苹果”、“方舟”和“猫”。现在,当我查找像“Ap”和“Ca”这样的前缀时,trie的“bool containsPrefix(字符串前缀)”方法将正确地返回true

现在我正在实现方法“boolcontainswholeword(stringword)”,它将为“Cat”和“Ark”返回true,但为“App”返回false(在上面的示例中)

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


干杯

键的结尾通常通过叶节点指示。要么:

  • 子节点为空;或
  • 您有一个带有一个键前缀的分支和一些子节点
您的设计没有叶/空节点。尝试用空值来表示它。

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


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

感谢您的响应。但是,我确实尝试通过检查空的childnodes集合来指示叶节点(如您所提到的)。这并不能解决以下问题:在trie中插入“Apple”。将“Appl”插入到trie中。问问“苹果”是不是一个完整的词。在本例中是这样的(假设您使用上面提到的方法检查叶节点),但是询问“Appl”是否是一个完整的单词会错误地返回false,因为“l”不是叶节点。添加“endoford”标志可以解决这一问题。