Я пытаюсь написать программу, которая принимает в строках и помещает их в бинарном дереве поиска в алфавитном порядке, как только они будут вставлены в дерево, пользователь запрашивает одно слово, чтобы быть удалено, таким образом, исключить этот узел из дерева, а затем выход дерево без этого узла обратно в порядке.
Все работает для этого до функции удаления, удаления функция делает работу, но очень странно, как он удаляет. Я думаю, что в настоящее время он удаляет полную сторону дерева, потому что когда я удалить последнее слово, он обычно работает. Я буду загружать свою функцию удаления и, если необходимо сделать еще больше, я могу загрузить остальную часть моего кода.
Благодаря!
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;
}
};














