Retourner la Liste des Elements d un Arbre Binaire? [Résolu]

Signaler
Messages postés
19
Date d'inscription
dimanche 11 juillet 2004
Statut
Membre
Dernière intervention
1 février 2007
-
JBAware
Messages postés
174
Date d'inscription
lundi 23 septembre 2002
Statut
Membre
Dernière intervention
6 avril 2011
-
Slut,
J ai implementé un arbre Binaire et j aimerai retourner une Liste(Vector) contenant ts les Elemnts de mon Arbre Binaire. J ai reussi a le faire en passant par un String ki retourne ts les elemnts de l arbre separé par des points, puis grace a StringTokenizer je recupere ces elemnts et j ajoute a ma liste. Mais malheureusemnt il s avere que c est une methode un peu lourde et pas tres apprecié. Alors j aimerai parcourir mon arbre Binaire directemnt et ajouter chaque Elemnt a ma Liste. qd je fais ceci, m a liste ne contient ke la racine :

public Vector listeArbreBinaire(){
if(racine ==null){
list = null;
}
else{
while(Noeud.getGauche()==null && Noeud.getDroit==null){
list.add(racine.getElement());
if(Noeud.getGauche()!=null){
listeArbreBinaire(Noeud.getGauche());
}
if(Noeud.getDroit()!=null){
llisteArbreBinaire(Noeud.getDroit());
}
return list;
}
Merci d avance!

3 réponses

Messages postés
174
Date d'inscription
lundi 23 septembre 2002
Statut
Membre
Dernière intervention
6 avril 2011
1
Salut,

Perso j'utliserai une méthode récursive...

du genre :


public void listeArbreBinaire (Vector list, Noeud noeud){


if (noeud.getGauche() != null){
listeArbreBinaire (list, noeud.getGauche());


}
if (noeud.getDroit() != null){
listeArbreBinaire (list, noeud.getDroit());


}
list.add(noeud.getElement();
}

JB@WAre
Messages postés
19
Date d'inscription
dimanche 11 juillet 2004
Statut
Membre
Dernière intervention
1 février 2007

tout d abord merci pr ton aide , la methode ke tu m as proposé marche super bien. Sinon j ai une autre preocupation. J aimerai enregistrer les elements de ma liste ds mon arbre binaire tout en veillant que l arbre crée soit un arbre binaire equilibré.
je te propose mon code:

public Noeud equilibre(Vector liste){
Vector elemntdedroit= new Vector();
Vector elemntdegauche= new Vector();
/*cette methode range alphabetiquement du plus petit au plus grand les elemnts contenus ds le vecteur.*/
rangealphabetiquement(meinListe);
int milieu= liste.size()/2;
Element monElemnt = (Element )liste.get(milieu);// racine de l arbre
for(int i=0; i<milieu; i++){
Element element = (Element )liste.get(i);
elemntdegauche.add(element );
}


for(int j=milieu+1; j<liste.size(); j++){
Element element = (Element )liste.get(j);
elemntdedroit.add(element );
}
Noeud monnoeud = new Noeud(element);
if(elemntdegauche.isEmpty()==false){
monnoeud .setGauche(equilibre(elemntdegauche));
}
if(elemntdedroit.isEmpty()==false){
monnoeud .setDroite(equilibre(elemntdedroit));
}
return monnoeud;
}

je comprends prkoi ca ne marche pas!!!!
Merci de ton aide.
Messages postés
174
Date d'inscription
lundi 23 septembre 2002
Statut
Membre
Dernière intervention
6 avril 2011
1
8-) JB@WAre