if (P.getValue()==val) //noeud a supprimer trouvée
{
if (P.getRight()!=null && P.getLeft()!=null) //2 fils
{
int d=P.getRight().getDeseq(); //on retiens le déseq a droite pour voir s'il a changé
boolean s=delMin(P,P.getRight()); //supprime le min a droite
// System.out.println("min deleted="+min);
//la variable globale min contient le min trouvé
P.setValue(min);
if (s || (P.getRight()!=null && P.getRight().getDeseq()==0 && P.getRight().getDeseq()!=d))
{
P.setDeseq(P.getDeseq()+1); //mise a jour du desequilibre du noeud
return (reequilibre(PP,P)==0); //on rééquilibre
}
return false;//le noeud parent n'as pas besoin de mettre a jour son deseq
}else
{
if (P.getRight()! =null) //1 fils a droite
{
//efface P
if (PP==null) //racine
root=P.getRight();
else if (PP.getRight()==P)
PP.setRight(P.getRight()); //droite
else PP.setLeft(P.getRight()); //gauche
return true; //le noeud parent doit se mettre a jour
}else //1 fils a gauche
{
//efface P
if (PP==null)
root=P.getLeft(); //racine
else if (PP.getRight()==P)
PP.setRight(P.getLeft()); //droite
else PP.setLeft(P.getLeft()); //gauche
return true; //le noeud parent doit se mettre a jour
}
}
}else //c'est pas le bon noeud, on descendre plus bas
{
//appel recursif selon la valeur du noeud a supprimer
if (valreturn false;
}
Le return false c'est cette instruction qui mintrigue, si c'est un
return false cela veut dire que je peux pas termnier l'execution du
reste des appels recursif
if (delete(P,P.getLeft(),val)) //suppression à gauche
P.setDeseq(P.getDeseq()-1);
Ce qui signifie que je met pas à jour le déséquilibre du pére du
noeud qui a été supprimé, mais en principe sa se passe pas comme sa on
doit mettre a jour le desq du pére, et du grd pére...jusqu'a à la
racine puisque ces des appel récursifs..et c'est en fonction du
deséquilibre qu'il peut y'avoir réequilibrage si nécessaire
return (reequilibre(PP,P)==0);//rééquilibrage si necessaire Cordialement