IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Java Discussion :

Parcours en profondeur d'un arbre n-aire


Sujet :

Langage Java

  1. #1
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut Parcours en profondeur d'un arbre n-aire
    Bonjour,

    j'aurais besoin d'aide concernant le parcours en profondeur (préfixe) d'un arbre n-aire.
    J'ai un problème pour écrire la méthode toString()
    ma classe est la suivante
    Je crée 2 classes Leaf(une feuille) et InternalNode(pour les arbres) mais c'est celle-ci qui me pose problèmes
    Node est une interface

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public class InternalNode implements Node{
    private int data;
    private Liste<Node> children;
    public String toString(){
    <...>
    }
    }
    Si quelqu'un pouvait m'aider?

    Merci d'avance

  2. #2
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    pour un parcours prefixe d'un arbre, il faut afficher les fils avant la racine... donc il faut que tu appeles les methodes toStrint() de chacun des elements de children. Ensuite, il te suffit d'afficher ta racine, c'est a dire la valeur de data... Quand je dis affiche, je me trompe de terme vu que tu dois renvoyer un chaine de caractere... a toi de voir comment faire...

  3. #3
    Membre émérite
    Avatar de xavlours
    Inscrit en
    Février 2004
    Messages
    1 832
    Détails du profil
    Informations forums :
    Inscription : Février 2004
    Messages : 1 832
    Points : 2 410
    Points
    2 410
    Par défaut
    Question importante :
    y a t il des références montantes (des feuilles vers la racine) ?
    Ou, en gros, une feuille sait-elle à quel noeud elle appartient ?

    Ca influera beaucoup sur ton algorithme.
    "Le bon ni le mauvais ne me feraient de peine si si si je savais que j'en aurais l'étrenne." B.V.
    Non au langage SMS ! Je ne répondrai pas aux questions techniques par MP.
    Eclipse : News, FAQ, Cours, Livres, Blogs.Et moi.

  4. #4
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    generalement ce n'est pas necessaire d'avoir un reference montante. Les algos sur les arbres ne l'utilise generalement pas. Et ce n'est vraiment pas necessaire dans le cas d'un parcours en profondeur.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 147
    Points : 155
    Points
    155
    Par défaut
    Citation Envoyé par benratti
    pour un parcours prefixe d'un arbre, il faut afficher les fils avant la racine...
    Nope !

    Le parcours préfixe est celui qui est décrit à chaque descente.

    Celui que tu décris est la parcours suffixe, càd de remontée à droite.
    Tous les fils seront traités avant la racine.

    Pour le parcours préfixe, il suffit de traiter le noeud dès que t'arrives dessus et qu'il n'a pas encore été traité.

    Pour les références montantes il n'y en a pas besoin.
    L'arbre, même n-aire est une structure de donnée par définition récursive.
    Ton parcours en profondeur peut alors être récursif aussi.
    C'est d'ailleurs l'implémentation de base d'un parcours en profondeur sur un arbre, sinon faut utiliser une pile et tout ...

  6. #6
    Membre confirmé Avatar de benratti
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    471
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mai 2004
    Messages : 471
    Points : 649
    Points
    649
    Par défaut
    Citation Envoyé par sylk974
    Le parcours préfixe est celui qui est décrit à chaque descente.

    Celui que tu décris est la parcours suffixe, càd de remontée à droite.
    Tous les fils seront traités avant la racine.
    desole... je me suis plante... mais dans tous les cas, li n'y a que l'ordre dans lequels sont effectué les traitements qui change mais le principe reste le meme.

    Pour plus de details sur les histoires de parcours d'arbre, j'ai trouvé ca sur google

  7. #7
    Rédacteur/Modérateur

    Avatar de bouye
    Homme Profil pro
    Information Technologies Specialist (Scientific Computing)
    Inscrit en
    Août 2005
    Messages
    6 840
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : Nouvelle-Calédonie

    Informations professionnelles :
    Activité : Information Technologies Specialist (Scientific Computing)
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Août 2005
    Messages : 6 840
    Points : 22 854
    Points
    22 854
    Billets dans le blog
    51
    Merci de penser au tag quand une réponse a été apportée à votre question. Aucune réponse ne sera donnée à des messages privés portant sur des questions d'ordre technique. Les forums sont là pour que vous y postiez publiquement vos problèmes.

    suivez mon blog sur Développez.

    Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the universe trying to produce bigger and better idiots. So far, the universe is winning. ~ Rich Cook

  8. #8
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par benratti
    pour un parcours prefixe d'un arbre, il faut afficher les fils avant la racine... donc il faut que tu appeles les methodes toStrint() de chacun des elements de children. Ensuite, il te suffit d'afficher ta racine, c'est a dire la valeur de data... Quand je dis affiche, je me trompe de terme vu que tu dois renvoyer un chaine de caractere... a toi de voir comment faire...
    Il faut que je fasse ceci :
    Mon interface Node puis des méthodes que je rajouterais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    interface Node{
    String toString();
    int size();
    boolean contains(int i);
    }
    Je crée une classe Leaf pour les noeuds n'ayant pas de fils et une classe InternalNode pour les noeuds ayant un ou plusieurs fils.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
     
    public class Leaf implements Node{
    private int data;
    //methode et constructeur facile à écrire
    }
     
    public class InternalNode implements Node{
    private int data;
    private Liste<Node> childrens:
     
    public InternalNode(int data, Liste<Node> childrens){
    this.data = data;
    this.childrens = childrens;
    }
     
    public String toString(){
    StringBuilder sb = new StringBuider();
    sb.append(data);
    sb.append(" ");
    sb.append(childrens.toString());
    return sb.toString();
    }
    }
    C'est bien comme cela que doit s'écrire la méthode toString()?

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2005
    Messages : 147
    Points : 155
    Points
    155
    Par défaut
    En gros oui.

    Je sais pas si tu peux faire du Liste<Node>.toString() direct sans faire de boucle ... J'ai jamais utilisé ca personnellement.

    Mais dans le principe c'est ca.

  10. #10
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par sylk974
    En gros oui.

    Je sais pas si tu peux faire du Liste<Node>.toString() direct sans faire de boucle ... J'ai jamais utilisé ca personnellement.

    Mais dans le principe c'est ca.
    Est ce que quelqu'un d'autres sauraient ?

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    760
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 760
    Points : 626
    Points
    626
    Par défaut
    Selon l'API, l'interface List ne definit pas de methode toString(). Il faut donc soit utiliser une implementation de cette interface possedant une telle methode qui specifie bien que l'appel de cette methode appel cette meme methode sur ces éléments, ce qui n'est pas forcement le cas. Sinon, tu est obliger d'utiliser une iteration et de le faire à la main effectivement.

    Ton Liste est quoi exactement? Une classe à toi ou une faute de frappe?

  12. #12
    Membre habitué
    Inscrit en
    Septembre 2005
    Messages
    747
    Détails du profil
    Informations forums :
    Inscription : Septembre 2005
    Messages : 747
    Points : 174
    Points
    174
    Par défaut
    Citation Envoyé par TabrisLeFol
    Selon l'API, l'interface List ne definit pas de methode toString(). Il faut donc soit utiliser une implementation de cette interface possedant une telle methode qui specifie bien que l'appel de cette methode appel cette meme methode sur ces éléments, ce qui n'est pas forcement le cas. Sinon, tu est obliger d'utiliser une iteration et de le faire à la main effectivement.

    Ton Liste est quoi exactement? Une classe à toi ou une faute de frappe?
    Pour List,c'est une faute de frappe.

    Est ce que tu pôurrais me montrer le code correspondant car je n'ai pas réussi à l'écrire?

    Merci

Discussions similaires

  1. [Débutant] Algorithme de parcours en profondeur d'un Arbre N-aire
    Par geforce dans le forum Débuter avec Java
    Réponses: 4
    Dernier message: 21/02/2015, 11h31
  2. Parcours d'arbres n-aire
    Par alatox dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 27/04/2010, 10h22
  3. [debutant] parcours en profondeur arbre n-aire
    Par tx dans le forum Langage
    Réponses: 1
    Dernier message: 15/02/2006, 03h56
  4. arbre n-aire delete
    Par Fry dans le forum C++
    Réponses: 13
    Dernier message: 19/10/2004, 21h22

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo