Εντάξει έτσι σκέφτηκα ότι ήταν σταθερό, αλλά παίρνω εντελώς αντιφατικά αποτελέσματα. Μου ξαναέγραψε το είδος από το μηδέν για να αρχίσει φρέσκο και εδώ είναι τα αποτελέσματά μου. Παίρνω κανένα λάθος, καμία συντριβή, απλά δεν τα αφαιρέσετε. Είναι ακριβώς βρωμίζει εντελώς το δέντρο και μου δίνει έναν τόνο πιο φύλλα, και αναμιγνύει τα πάντα. Δεν είστε σίγουροι πού αλλού να πάει
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;
}













