Arbre ou Liste liees??

Signaler
Messages postés
19
Date d'inscription
dimanche 11 juillet 2004
Statut
Membre
Dernière intervention
1 février 2007
-
Messages postés
19
Date d'inscription
dimanche 11 juillet 2004
Statut
Membre
Dernière intervention
1 février 2007
-
Slut !
J ai un gros problem ke je n arrive pas a resoudre depuis deja plus de 2 semaines et je sollicite ici votre aide. Voila j ai une classe Arbre (voir image ci-dessou). Chaque Noeud de cet arbre possede une Liste(ListIterator) qui contient tous ses subordonnés.
(ListIterator elementListe = Noeud.getListe());

Mon Problem: Implementer une methode qui prend pr parametre un chiffre representant une hauteur (H) de l arbre et cette methode devrait retourner une liste contenant tt les Elments a cette hauteur.

Je prefere ne pas vous donner ce ke j ai fait jusqu ici. Sinon au cas ou ca pourrait vous etre util, j ai cree une classe ListPlus ki extends de Vector et cette classe contient une Methode nommé addAutreListe(List autreListe) Cette methode ajoute a une liste deja existante les elements de la liste donnée en parametre.

Merci d avance!

4 réponses

Messages postés
60
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
29 octobre 2010
1
salut, Ton image ne marche pas [file:///C:/Dokumente%20und%20Einstellungen/Anatole/Desktop/arbre.jpg file:///C:/Dokumente%20und%20Einstellungen/Anatole/Desktop/arbre.jpg] bien que chez toi elle dois marcher vu que sa pointe vers un fichier à toi.

Sinon pour ton pb j'ai pas tt tt compris mais en général pour un parcourt d'arbres c'est des méthodes récursives
et tu peux mettre une condition de sortie qui est (H)

parcours (Hauteur souhaité,hauteur actuelle,arbre A)
si hauteur_souhaite== hauteur_actuelle
parcourirNoeud(A.liste())
sinon si hauteur_souhaite > hauteur_actuelle
parcours (Hauteur souhaité,hauteur actuelle+1,arbre A.Noeud)


sa doit etre un truc comme sa enfin plus compliqué car au niveau au dessus tu dois parcourir la liste tout en rappellant parcours. avec a chaque fois les coordonnées du noeud suivant. Bon mon explication est pas très claire désolé.
Messages postés
19
Date d'inscription
dimanche 11 juillet 2004
Statut
Membre
Dernière intervention
1 février 2007

resalut a tous
tout d abord merci a [auteurdetail.aspx?ID=53932 ObiWanKennedy] , j ai éssayé ce ke t as dit, mais ca ne m a vraiment pas aidé.
voila j essai de représenter ca autrement:

h0----h1----h2-----h3 (h=hauteur)

Ah0
Ah1
Ah2
Ah3
Bh3
Bh2
Ch3
Ch2
Dh3
Eh3
Bh1
Dh2
Eh2
Fh2
Ch1
Gh2
Fh3

Hh2

Ih2
Si on donne une Hauteur la methode devrait retourner ts les elements a cette hauteur.

bref voici mon code:

public void eltsDeMemeHauteur(int hauteur_actuelle, int hauteur_souhaiter, Noeud noeud, ListPlus liste){
// si la hauteur souhaitée est 0 c a d celle ou se trouve la racine de notre arbre.
if(hauteur_souhaite==hauteur_actuelle) {
liste.add(noeud);
}
else{
Vector lesFilsDuNoeud = noeud.getList();
if(hauteurSouh==hauteurAkt-1){
liste.addAutreListe(lesFilsDuNoeud );
}
else {
int i = 0;
whlie(i<lesFilsDuNoeud .size()){
Noeud unFils = (Noeud)lesFilsDuNoeud .get(i);
eltsDeMemeHauteur(hauteur_actuelle+1, hauteur_souhaite, unFils, liste);
}
}
}

NB: ListPlus est une classe qui extends de la classe Vector et qui
implemente une methode appellé addAutreListe(List autreListe) associe a
ce Vector les elts de la liste donnée en paramettre.vous pouvez vous en passer si vous le souhaiter. La methode Noeud.getListe() retourne une List contenant les elements du noeud en question.
Merci d avance...
Messages postés
60
Date d'inscription
lundi 17 février 2003
Statut
Membre
Dernière intervention
29 octobre 2010
1
bon d'abord tu vas me dire si j'ai bien compris ton code

1/ objectif de base
crée une liste contenant tous les noeuds d'un hauteur? pour ensuite afficher (ou autre) cette liste et avoir tous les noeuds de la hauteur donné.

donc si on arrive à la hauteur H
on ajoute le noeud à la liste (celà ne marche que pour le root de l'arbre)

ensuite si tu te trouves un cran au dessus de la hauteur souhaité tu ajoutes toutes la listes des fils du noeud.
apres si tu es dans aucun de ces cas tu parcours la liste de fils de façon récursive.
et je crois qu'il te manque qu'elle que chose .
enfin a moins que sa soit un oublie mais il n'y a pas de i++ donc ta variable i doit tjs rester a 0 donc je te conseille un for
for(int i=0;i<lesFilsDuNoeud.size();i++)
{
Noeud unFils = (Noeud)lesFilsDuNoeud .get(i);
eltsDeMemeHauteur(hauteur_actuelle+1, hauteur_souhaite, unFils, liste);
}
de plus sans i++ tu as une boucle infinie.

sinon j'ai 2 conseils a te donner
un il existe le else if c'est qu'un détails mais sa rend un code plus lisible surtt si tu fais des trucs avec bcp de conditions quoi.
et 2eme conseil quand tu as un probleme essaie de mieu le décrire a quel auteur sa coince. est-ce que sa compile oui non ? est que tous se passe bien mais à la fin tu as un résultat faux . Il y a un probleme durant l'execution ? enfin se genre de truc parce que si sa compile pas on peux cherché une erreur de syntaxe alors que si ca renvoie un résultat faux c'est un probleme d'algo (qui peux parfois etre tous petits) et si sa ne s'execute pas il y a surement des erreurs de sémantique du code.
voila.
Messages postés
19
Date d'inscription
dimanche 11 juillet 2004
Statut
Membre
Dernière intervention
1 février 2007

Merci bien pr tes conseils, sinon j ai finalment rèsolu le problem!
Bonne journée!