Les arbres n-aires en java

Fermé
angel - 10 avril 2009 à 18:17
mamiemando Messages postés 33084 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 avril 2024 - 5 mai 2011 à 18:57
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.
A voir également:

2 réponses

mamiemando Messages postés 33084 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 avril 2024 7 749
10 avril 2009 à 21:22
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
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
mamiemando Messages postés 33084 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 29 avril 2024 7 749
5 mai 2011 à 18:57
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