Я внедряю словарь для написания трии к импментам. Основным элементом trie является триенкод, состоящий из части письма (char), флага (является ли этот символ последним символом слова) и массивом из 26 указателей.Подсчитайте слово в реализации trie
Частная часть класса TrieNode включают в себя:
ItemType item;//char
bool isEnd;//flag
typedef TrieNode* TrieNodePtr;
TrieNodePtr myNode;
TrieNodePtr array[26];//array of pointers
Это является частью тестового вызова:
Trie t4 = Trie();
t4.insert("for");
t4.insert("fork");
t4.insert("top");
t4.insert("tops");
t4.insert("topsy");
t4.insert("toss");
t4.print();
cout << t4.wordCount() << endl;
Сейчас я пытаюсь пройти через синтаксического дерева, чтобы подсчитать, сколько слов (сколько флагов установлено в true).
size_t TrieNode::wordCount() const{
for (size_t i = 0; i < 26; i++){
if (array[i] == nullptr){
return 0;
}
if (array[i]->isEnd && array[i] != nullptr){
cout << "I'm here" << endl;
return 1 + array[i]->wordCount();
}
else if(!array[i]->isEnd && array[i]!=nullptr){
cout << "I'm there" << endl;
return 0 + array[i]->wordCount();
}
else{
// do nothing
}
}
}
Каждый раз, когда функция возвращает 0. Я знаю, что это потому, что, когда первый элемент массива имеет нулевое значение, то функция завершается, поэтому отсчет всегда равен 0. Но я не знаю, как избежать этого , так как каждый раз, когда я начинаю с первого указателя. Я также получаю предупреждение: не все пути управления возвращают значение. Я не уверен, откуда это взялось. Как заставить функцию перейти к следующему указателю в массиве, если текущий указатель равен NULL? Есть ли более эффективный способ подсчета слов? Спасибо!
Пожалуйста, покажите, как называется эта вещь, данные инициализации и т.д. Не достаточно контекст здесь. – OldProgrammer