Ok, donc je pensais que c'était corrigé, mais je reçois des résultats totalement incohérents. Je l'ai réécrit à partir de rien pour repartir à zéro et voici mes résultats. Je n'ai pas d'erreur, je ne plante pas, ça ne les supprime pas. Cela ne fait que salir complètement l'arbre et me donne une tonne de feuilles de plus, et ça mélange tout. Je ne sais pas où allerSuppression de l'arbre de recherche binaire (Méthode Inorder Pred) C++
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;
}
Je ne sais pas pourquoi, mais je suis toujours obtenir une erreur de segmentation :( – Doug