Я использую C ++ для построения дерева слов с кучей слов в словаре.Вот как я определил свой TrieNode и построил дерево:
struct TrieNode {
TrieNode *children[26];
bool isWord;
TrieNode(): isWord(false) {} /* to be deleted */
};
void buildTree(TrieNode *root, string word) {
TrieNode *cur = root;
for (char c : word) {
if (!cur->children[c-'a'])
cur->children[c-'a'] = new TrieNode();
cur = cur->children[c-'a'];
}
cur->isWord = true;
}
Это отлично работает на некоторых компиляторах, но на других это дает некоторые странные результаты.Например, однажды я обнаружил, что isWord был инициализирован как 152, и вся программа потерпела крах.Я попытался удалить строку, отмеченную выше в коде, все снова получилось.Что здесь происходит?
Кроме того, в чем разница между "новым TrieNode ()" и "новым TrieNode"?Иногда я обнаруживал, что они тоже дают разные результаты.