Ich versuche, ein Programm zu schreiben, die in Strings nimmt und legt sie in einem binären Suchbaum in alphabetischer Reihenfolge, sobald diese in den Baum eingefügt werden, fordert ein Benutzer für ein Wort gelöscht werden, so dass der Knoten aus dem Baum zu löschen, und dann Ausgabe der Baum ohne diesen Knoten wieder in Ordnung.
Alles für das funktioniert bis zu der Löschfunktion, die Löschfunktion funktioniert, aber es ist sehr seltsam, wie es löscht. Ich denke, dass es derzeit eine volle Seite des Baumes löscht, denn als ich das letzte Wort löschen, es funktioniert in der Regel. Ich werde meine Löschfunktion laden und wenn mehr benötigt wird, kann ich den Rest meines Code laden.
Vielen Dank!
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;
}
};














