【发布时间】:2019-04-02 22:36:47
【问题描述】:
我目前正在开发一个程序,我正在将单词插入到 trie 中。目前我的插入功能只添加单词的第一个字母然后停止。从我查找的所有内容来看,我的代码看起来是正确的,所以我不明白问题是什么。
我尝试将 temp-> wordEnd = true 移到 for 循环的外部和函数的不同位置。因为我相信这是问题所在,因为我的插入函数中的所有其他内容看起来都是正确的。
这是我的插入函数:
bool Trie::insert(string word)
{
TrieNode *temp = root;
temp->prefixAmount++;
for (int i = 0; i < word.length(); ++i)
{
int currentLetter = (int)word[i] - (int)'a';
if (temp->child[currentLetter] == NULL)
{
temp->child[currentLetter] = new TrieNode();
temp->child[currentLetter]->prefixAmount++;
temp = temp->child[currentLetter];
}
temp->wordEnd = true;
return true;
}
}
也帮助大家更好地遵循我的代码 这是我的 TrieNode 结构:
struct TrieNode
{
int prefixAmount;
struct TrieNode *child[ALPHA_SIZE];
bool wordEnd;
};
这是我的 Trie 构造函数:
Trie::Trie()
{
root = new TrieNode();
root->wordEnd = false;
root->prefixAmount = 0;
}
预期的结果应该是插入了整个单词。 实际发生的是只添加了单词的第一个字母。
【问题讨论】: