Я хочу реализовать tr ie в cpp. Когда я попытался распечатать все строки в tr ie, ничего не было напечатано. Но код был успешно скомпилирован. Я думаю, что-то не так с моей вставкой. Я предполагаю, что я должен пройти по ссылке где-нибудь, чтобы tr ie был действительно изменен, но я не уверен, где или в чем проблема.
Моя структура:
struct Node {
unordered_map<char, Node*> children;
bool completeWord;
};
class Trie {
private:
Node* root;
void printAll(Node* tmp);
public:
Trie();
void insert(string s);
void printAll();
};
Trie::Trie() {
root = new Node();
root->completeWord = false;
}
Методы:
void Trie::insert(string s) {
Node* p = root;
for(char c : s) {
auto m = p->children;
if(!m.count(c)) {
Node* n = new Node();
m.insert(pair<char, Node*>(c,n));
}
else
p = m[c];
}
p->completeWord = true;
}
printВсе для отладки:
void Trie::printAll() {
printAll(root);
}
void Trie::printAll(Node* tmp) {
Node* t = tmp;
auto m = t->children;
if(!m.empty()){
for(auto p : m) {
cout << p.first << " ";
printAll(p.second);
}
}
}
Контрольные примеры:
int main() {
Trie* t = new Trie();
string arr[] = {"abc", "abcd", "lmn", "edf"};
for(string s : arr)
t->insert(s);
t->printAll();
return 0;
}