Snažím se napsat program, který bere v řetězcích a umístí je do binárního vyhledávacího stromu v abecedním pořadí, jakmile budou vloženy do stromu, uživatel požádá o jedno slovo, které mají být odstraněny, čímž se zrušením tohoto uzlu ze stromu, a pak výstup strom, aniž by tento uzel zpět do pořádku.
Vše funguje na to až do smazání funkce vymazání funkce funguje, ale jeho velmi podivné, jak to odstraní. Myslím, že v současné době odstraní plnou stranu stromu, protože když jsem odstranit poslední slovo, to obvykle funguje. Budu nahrát svůj smazat funkci a je-li zapotřebí více mohu nahrát zbytek mého kódu.
Dík!
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;
}
};














