Ok, so dachte ich, es wurde festgelegt, aber ich bin immer völlig inkonsistente Ergebnisse. Ich schrieb es Art von Grund auf neu zu beginnen und hier sind meine Ergebnisse. Ich habe keine Fehler auftreten, kein Krachen, es nicht entfernen Sie sie nicht. Es verwirrt gerade total auf den Baum und gibt mir eine Tonne mehr Blätter, und mischt sich alles auf. Nicht sicher, wo sonst zu gehen
template <class T>
void BST<T>::remove(struct Node<T>*& root, const T& x)
{
Node<T>* ptr = root;
bool found = false;
Node<T>* parent;
while (ptr != NULL && !found)
{
if (x < ptr->data)
{
parent = ptr;
ptr = ptr->left;
}
else if (x > ptr->data)
{
parent = ptr;
ptr = ptr->right;
}
else
found = true;
}
if (found == false)
return;
else
{
if(ptr->left != NULL && ptr->right != NULL)
{
Node<T>* inOrderPtr = ptr->left;
parent = ptr;
while (inOrderPtr->right != NULL)
{
parent = inOrderPtr;
inOrderPtr = inOrderPtr->right;
}
ptr->data = inOrderPtr->data;
ptr = inOrderPtr;
}
Node<T>* subPtr = ptr->left;
if (subPtr == NULL)
subPtr = ptr->right;
else if (parent->left == ptr)
parent->left = subPtr;
else
parent->right = subPtr;
delete ptr;
}













