• [^] # Re: je ne suis pas un pro en java

    Posté par . En réponse au message [JAVA] Suppression dans un arbre binaire ordonné. Évalué à 1. Dernière modification le 04 janvier 2014 à 20:04.

    Merci pour ta réponse.
    Tu es sûr pour les accolades fermantes ? Je n'ai pas d'erreur de compilation pourtant...

    En fait je suis censé gérer 3 cas avec mon algo (cf wikipédia) :

    1) Suppression d'une feuille : Il suffit de l'enlever de l'arbre vu qu'elle n'a pas de fils.
    2) Suppression d'un nœud avec un enfant : Il faut l'enlever de l'arbre en le remplaçant par son fils.
    3) Suppression d'un nœud avec deux enfants : Supposons que le nœud à supprimer soit appelé N. On échange le nœud N avec son successeur le plus proche (le nœud le plus à gauche du sous-arbre droit) ou son plus proche prédécesseur (le nœud le plus à droite du sous-arbre gauche).
    Puis on applique à nouveau la procédure de suppression à N, qui est maintenant une feuille ou un nœud avec un seul fils.

    Mon code ressemble a ceci actuellement et ne marche toujours pas :

     // Supprime un noeud a partir de sa valeur 
     public void remove(V val) {
     GenericBinaryTree<V> noeudConcerne, pereNoeud;
     // Le noeud concerné est celui qu'on veut supprimer
     noeudConcerne = this.trouverNoeud(val);
     // Si le noeud concerné a un sous arbre gauche
     if (noeudConcerne.SAG != null) {
     // pereNoeud est le pere du maximum du SAG du noeud
     pereNoeud = this.SAG.perMax();
     System.out.println("coucou1");
     // Si il est nul alors
     if (pereNoeud == null) {
     this.value = this.SAG.value;
     this.SAG = this.SAG.SAG;
     System.out.println("coucou2");
     } else {
     this.value = pereNoeud.SAD.value;
     pereNoeud.SAD = pereNoeud.SAD.SAG;
     System.out.println("coucou3");
     }
     }
     if (noeudConcerne.SAD != null) {
     // pereNoeud est le pere du minimum du SAD du noeud
     pereNoeud = this.SAD.perMin();
     System.out.println("coucou4");
     // Si il est nul alors
     if (pereNoeud == null) {
     System.out.println("coucou5");
     this.value = this.SAD.value;
     this.SAD = this.SAD.SAD;
     } else {
     System.out.println("coucou6");
     this.value = pereNoeud.SAG.value;
     pereNoeud.SAG = pereNoeud.SAG.SAD;
     }
     }
     }

    En algo la réponse me va très bien je la retranscrirai en java, mais c'est vraiment dur a trouver j'ai du mal avec la récursivité