31. Алгоритм вставки элемента в trie-дерево.
void insert(TrieNode* root, string str, int i=0)
{
if (i < str.length())
{
if (i == str.length() - 1)
root->eow = true;
else
{
if (root->alph[str[i] - 'a'] == nullptr)
{
root->alph[str[i] - 'a'] = new TrieNode;
insert(root->alph[str[i] - 'a'], str, i + 1);
}
}
}
}
32. Алгоритм удаления элемента из trie-дерева.(это делал чатик так что рискуем)
void remove(string word)
{
removeHelper(word, root, 0);
}
void removeHelper(string& str, TrieNode* current, int i)
{
if (i == str.length())
{
if (current != nullptr)
{
current->isEndOfWord = false;
}
return;
}
if (current->children[str[i] - 'a'] != nullptr)
{
removeHelper(str, current->children[str[i] - 'a'], i + 1);
if (current->children[str[i] - 'a']->isEndOfWord == false)
{
delete current->children[str[i] - 'a'];
current->children[str[i] - 'a'] = nullptr;
}
}
}
void visualizeTree(Node* root, int level = 0)
{
if (root == nullptr) return;
visualizeTree(root->right, level + 1);
for (int i = 0; i < level; i++)
cout << " ";
cout << root->key << endl;
visualizeTree(root->left, level + 1);
}