Les arbres n-aires en java

angel -  
mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   -
Bonjour tout le monde,
j'ai besoin d'aide sur le sujet suivant "les arbres n-aires en java".
le fonction de ces arbres sachant qu'a chaque fois on a un nombre different de branches,
comment peut on les construire,les afficher(parcour en proffondeur).
(g chercher mais g pas trouvé becoup de documentations sur ce sujet avec java ).

merci de votre aide.

2 réponses

  1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
     
    En soit, ça n'a rien à voir avec java, ça dépend surtout de la manière dont tu implémentes ta classe d'arbre. A priori pour un arbre n-aire tu vas stocker une liste ou un vecteur de n fils. Il suffit donc d'éffectuer un appel récursif sur chaque nœuds fils pour visiter l'arbre.

    En C++ voilà ce que ça donnerait :
    #include <vector>
    #incldue <iostream>
    
    struct noeud_t{
      int data;
      std::vector<struct noeud_t *> fils;
    };
    
    struct arbre_t{
      struct noeud_t *racine;
    };
    
    void afficher_noeud_rec(const struct noeud_t *n,unsigned profondeur){
      for(unsigned i=0;i<profondeur;++i) std::cout << '\t'; // indenter le noeud
      std::cout << n->data << std::endl; // écrire la donnée stockée
      for(unsigned i=0;i<n.fils.size();++i){
        afficher_noeud_rec(n.fils[i],profondeur+1); // écrire les noeuds fils
      }
    }
    
    void afficher_arbre(const struct arbre_t & a){
      afficher_noeud_rec(a.racine,0);
    }

    Petite subtilité : en java tout est passé par référence, donc pour que l'indentation fonctionne correctement il faudra faire une variable profondeur intermédiaire.

    Bonne chance
    1
  2. kermittt
     
    NB: en java, tout n'est pas forcément passé par référence (cf. mot-clef 'final' et types élémentaires)

    Sinon, merci pour le code cpp^^
    0
    1. mamiemando Messages postés 33228 Date d'inscription   Statut Modérateur Dernière intervention   7 944
       
      Pour moi ça passe juste une const référence et donc ça reste une référence. Ce n'est pas un passage par recopie comme le c et le c++ le permettent.
      0