Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 22/03/2006, à 08:33

Premium

[Java]Arbre n-aire

Bonjour,

j'ai codé différentes méthodes pour des arbres n-aires.
J'aurais d'aide besoin pour l'écriture d'une méthode traverse qui renvoie la liste des noeuds(List<Node>) en ordre préfixe

Merci


Node correspond a une classe astraite qui est utilisée pour savoir si on est dans le cas d'une feuille ou d'un noeud(ayant un ou plusieurs fils)

public abstract class Node {
    private final int data;
    ....//methode que j'ai écrit
}
public class Leaf extends Node{
   ...
}
public class InternalNode extends Node{
    private final List<Node> children;
...
}

La fonction traverse a été écrite de cette manière mais je n'ai pas le sommet de mon arbre

public List<Node> traverse(){
	return root.traverse();
    }

Dernière modification par Premium (Le 22/03/2006, à 12:36)

Hors ligne

#2 Le 23/03/2006, à 16:01

amadeus

Re : [Java]Arbre n-aire

Bonjour
Pas sûr d'avoir bien compris... tu cherche un algorithme?


Dumbledore returns from the dead and declares it to be hammertime, Harry proceeds to break it down, Voldemort is unable to touch this.

Hors ligne

#3 Le 24/03/2006, à 00:50

Soulfly_tribe90

Re : [Java]Arbre n-aire

Ca me rappelle un td que j'ai fait y a pas tres longtps en Java big_smile

Hors ligne

#4 Le 24/03/2006, à 11:57

zeugme

Re : [Java]Arbre n-aire

Ce que je vois, c'est que etant donne un noeud, tu peut pas savoir ou se trouve la racine.
C'est impossible tel que tu implemente Noeud.
Il manque un attribut parent de type Noeud.
Pour avoir la racine tu remonte via parent jusqu'a ce que parent == null.

Le nommage de tes classes est etrange.
En fait, Noeud n'est pas un noeud, c'est une donnee.
InternalNode est un noeud par contre.
J'aurais plutot fait Leaf, Node extends Leaf. et ensuite une autre classe Data.
Naturellement, Leaf (et donc Node par heritage) ont un attribut de type Data.

En UML texte, ca donne :

Leaf -> Data
   ^
    |
Node


Ah oui, aussi : Collection est plus abstrait que List.
Donc a privilegier.
Enfin, grace a Java 5, tu peut typer tes collections :
Collection<Node> children = new ArrayList<Node>();

Si tu doit faire des trucs avec des threads, attention, ArrayList n'est pas thread safe.

Dernière modification par jbb (Le 24/03/2006, à 12:00)

Hors ligne