Retourner la Liste des Elements d un Arbre Binaire?

Résolu
cs_Delamour Messages postés 19 Date d'inscription dimanche 11 juillet 2004 Statut Membre Dernière intervention 1 février 2007 - 12 juin 2005 à 03:55
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 - 20 juin 2005 à 00:36
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

JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
14 juin 2005 à 00:45
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
3
cs_Delamour Messages postés 19 Date d'inscription dimanche 11 juillet 2004 Statut Membre Dernière intervention 1 février 2007
18 juin 2005 à 01:27
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.
0
JBAware Messages postés 174 Date d'inscription lundi 23 septembre 2002 Statut Membre Dernière intervention 6 avril 2011 1
20 juin 2005 à 00:36
8-) JB@WAre
0
Rejoignez-nous