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 publicvoidremove(Vval){GenericBinaryTree<V>noeudConcerne,pereNoeud;// Le noeud concerné est celui qu'on veut supprimernoeudConcerne=this.trouverNoeud(val);// Si le noeud concerné a un sous arbre gaucheif(noeudConcerne.SAG!=null){// pereNoeud est le pere du maximum du SAG du noeudpereNoeud=this.SAG.perMax();System.out.println("coucou1");// Si il est nul alorsif(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 noeudpereNoeud=this.SAD.perMin();System.out.println("coucou4");// Si il est nul alorsif(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é
[^] # Re: je ne suis pas un pro en java
Posté par Odenelle . 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 :
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é