Я пытаюсь написать программу, которая принимает строки и помещает их в двоичное дерево поиска в алфавитном порядке, как только они вставляются в дерево, пользователь предлагает удалить одно слово, удаляя тем самым этот узел из дерева., а затем выведите дерево без этого узла в указанном порядке.
Все работает вплоть до функции удаления, функция удаления работает, но очень странно, как она удаляет.Я думаю, что в настоящее время он удаляет полную сторону дерева, потому что когда я удаляю последнее слово, это обычно работает.Я загружу свою функцию удаления, и если потребуется больше, я могу загрузить остальную часть своего кода.
Спасибо!
template<typename T> void Delete(TreeNode<T>*& root, const T& data)
{
if (root == NULL)
return;
if(data < root->Value)
return Delete(root->Left, data);
else if (root->Value > data)
return Delete(root->Right, data);
else
{
TreeNode<T>* old_root = root;
if (root->Left == NULL)
{
root = root->Right;
}
else if (root->Right == NULL)
{
root = root->Left;
}
else
{
replace_parent(old_root, old_root->Left);
}
delete old_root;
}
};
template<typename T> void replace_parent(TreeNode<T>*& old_root, TreeNode<T>*& root)
{
if (root->Right != NULL)
{
replace_parent(old_root, root->Right);
}
else
{
old_root->Value = root->Value;
old_root = root;
root = root->Left;
}
};