我有一个关于Trie数据结构的具体问题以及我的代码出了什么问题。当我递归调用insert时,函数参数root总是为NULL。这是我的代码:
代码:
//subNodes is an array of TrieNode pointers that contains indices for all letters in the alphabet
bool insert(const string& word, TrieNode* root, int curI = 0)
//PRE: word must be a valid word in a dictionary
//POST: True when a word is inserted into the Trie, false otherwise
{
if(curI >= word.length()) //word has been scanned fully
{
root->isWord = true;
return true;
}
else //word has more letters to be scanned
{
if(root->subNodes[word[curI] - 'A'] == NULL) //if the current letter of the word is not in the trie
{ // insert the letter and advance the current letter of the word
root->subNodes[word[curI] - 'A'] = new TrieNode(word[curI]);
insert(word, root->subNodes[word[curI] - 'A'], curI++);
}
else //if the currrent letter of the word is in the trie
{ // advance the current letter of the word
insert(word, root->subNodes[word[curI] - 'A'], curI++);
}
}
}
我通过将subNodes[word[curI] - 'A']
替换为subNodes[word[13]]
来测试了这一点(13
是字母表中N
的索引,我正在测试单词not)并且root不再是该调用为NULL。因此索引有问题。有谁知道什么是错的?我考虑过使用C ++地图或矢量。有没有人对使用数组有任何不同意见?
答案 0 :(得分:0)
您的意思是++curl
- 即将递增的值传递给递归调用?由于curl++
是后递增的,因此您将相同的值传递给每个递归。不管怎样,编写curl + 1
可能更容易,因为您不再需要卷曲值。
答案 1 :(得分:0)
这里有两个问题。
http://en.wikipedia.org/wiki/Sequence_point
http://c-faq.com/expr/seqpoints.html
以下将解决问题。
insert(word, root->subNodes[word[curI] - 'A'], curI);
curI++;