Je codage d'un arbre de recherche binaire et je vais avoir un peu de mal à trouver un moyen de supprimer le noeud efficacement.
J'ai ce code:
struct node* deleteNode(int i, struct node *N)
{
if (N==NULL)
{
return NULL;
}
else if (i<N->value)
{
N->size--;
N->lChild=deleteNode(i,N->lChild);
}
else if (i>N->value)
{
N->size--;
N->rChild=deleteNode(i,N->rChild);
}
else if (N->lChild==NULL)
{
return N->rChild;
}
else if (N->rChild==NULL)
{
return N->lChild;
}
else
{
N->size--;
N->value=findMin(N->rChild);
N->rChild=deleteNode(N->value,N->rChild);
}
return N;
}
Et N est une structure de noeuds qui ont des 5 champs: valeur, LCHILD, rChild, la taille, la hauteur. En fait ce que je fais ici est de rendre l'arbre de ne pas pointer vers le nœud que je veux supprimer, mais quand je suis en train de mettre quelque chose comme:
else if (N->rChild==NULL)
{
free(N);
N=NULL;
return N->lChild;
}
Ou tous les codes d'aspect similaire, il ne fonctionne pas. Quelqu'un peut-il me diriger dans la bonne direction s'il vous plaît? Je vous remercie.













