ABR_supprimer(A, Z) { // Z pointe sur la cellule de A qui doit etre supprimee // Aux pointera sur la cellule qui va remplacer Z si (Z.fg <> nil ET Z.fd <> nil) alors { Aux <- ABR_successeur(A, Z); // Aux n'a pas de fg // Aux est le fg de son pere qui existe // Deconnexion de Aux Aux.pere.fg <- Aux.fd; si (Aux.fd <> nil) alors Aux.fd.pere <- Aux.pere; // Connexion de Aux à ses nouveaux fils Aux.fg <- Z.fg; Aux.fg.pere <- Aux; Aux.fd <- Z.fd; Aux.fd.pere <- Aux; } sinon si (Z.fg = nil) alors Aux <- Z.fd sinon Aux <- Z.fg; // Connexion de Aux a son nouveau pere si (Z.pere = nil) alors // Z est la racine A <- Aux sinon si (Z.pere.fg = Z) alors Z.pere.fg <- Aux sinon Z.pere.fd <- Aux; si (Aux <> nil) alors Aux.pere <- Z.pere; // Isolation de la cellule Z pour pouvoir la detruire Z.pere <- nil; Z.fg <- nil; Z.fd <- nil; }