Implementation arbre
Résolu
khaoula_ba
Messages postés
6
Statut
Membre
-
khaoula_ba Messages postés 6 Statut Membre -
khaoula_ba Messages postés 6 Statut Membre -
bonjour, je cherche à construire un arbre appelé in_tree dans lequel chaque noeud a au plus un successeur et un nb quelconque de predecesseurs.
je cree une classse et une methode comme suivant
le probléme que ma procedure boucle infiniment à cause de la recursivité mais je trouve pas comment corriger.
je cree une classse et une methode comme suivant
public class Arbre {
public Arbre succ;
public Arbre [] pred;
public static int Numniveau;//niveau du noeud
public int val;//le nom de la tache qui est 1 ou 2 ou 3
public int poids=0;
public boolean feuille;//si le noeud courent est feuille alors feuille =true sinn false
//une feuille est un noeud qui ne posséde aucun predecesseur
public Arbre()
{succ=null;
val=1;
Numniveau=1;
feuille=false;
}
int k=1;
public void generate(Arbre racine,int nb_pred_max,int nb_niveaux)//nb_pred_max c'est le nombre max de predecesseurs d'un noeud donné en parametre
{
if (racine.Numniveau<nb_niveaux)
{ int n=(int) (Math.random() * nb_pred_max + 1);
racine.pred=new Arbre[n];
for(int i=0;i<racine.pred.length;i++)
{k++;//pour assurer l'obtention de taches distinctes
racine.pred[i]=new Arbre();
racine.pred[i].Numniveau=racine.Numniveau+1;
racine.pred[i].succ=racine;
racine.pred[i].val=k;
generate(racine.pred[i],nb_pred_max,nb_niveaux);
}
}
else
racine.feuille=true;
}
}
le probléme que ma procedure boucle infiniment à cause de la recursivité mais je trouve pas comment corriger.
A voir également:
- Implementation arbre
- Arbre généalogique famille michelin - Télécharger - Généalogie
- Glandier arbre ✓ - Forum Photoshop
- Arbre généalogique de Nicolas Menoux - Forum Logiciels
- Implémentation cbase non disponible - Forum SQL Server
- Film arbre qui pousse dans le ventre ✓ - Forum Cinéma / Télé
3 réponses
public static int Numniveau;//niveau du noeudIl n'y a aucune raison que ceci soit static (c'est à dire commun à tous les arbres que tu vas créer), de plus ce genre d'information n'a pas à être stockée dans la structure, elle devrait être calculée par une méthode. Donc ta condition principale "if (racine.Numniveau<nb_niveaux)" est à revoir !
public boolean feuille;//si le noeud courent est feuille alors feuille =true sinn false
Idem, cette information se calcule (avec pred==null) pas besoin de la stocker.
Il faudrait aussi revoir l'encapsulation, tout mettre à public est une mauvaise idée !
public int val;//le nom de la tache qui est 1 ou 2 ou 3Tu pourrais utiliser un enum, ce serait plus sûr pour restreindre les valeurs possibles.
public static enum Tache { T1, T2, T3};
protected Tache val;
int k=1;Si ça ne fait pas partie de la structure de l'arbre, alors ça n'a rien à faire ici !
//une feuille est un noeud qui ne posséde aucun predecesseurSi c'est une feuille tu devrais avoir un successeur non null, ici en fait c'est une racine que tu construis !
Remarque : avec les arbres le vocabulaire consacré est plutôt de parler d'un père et de plusieurs fils (pas de successeur et de prédécesseurs...)
Bref, il y a beaucoup de choses à revoir, en commençant par la structure de l'arbre !
public class Arbre
{
protected Arbre pere;
protected Arbre[] fils;
public static enum Tache {T1, T2, T3};
protected Tache val;
protected int poids;
bonsoir,
je cherche à affecter à chaque noeud un poids qui represente le nombre de predecesseurs total de chaque noeud.
si c'est une feuille son poids est egal à 1 sinn sommes des poids de ses predecesseurs directs
pour ceci j'ai implémenté:
mais ca ne marche pas correctement
pouvez vous m'aider svp?????
cé urgent. et merci d'avance
je cherche à affecter à chaque noeud un poids qui represente le nombre de predecesseurs total de chaque noeud.
si c'est une feuille son poids est egal à 1 sinn sommes des poids de ses predecesseurs directs
pour ceci j'ai implémenté:
public int somme_poids(Arbre racine)
{int x=1;
for(int i=0;i<racine.pred.length;i++)
{ x=x+racine.pred[i].poids;}
return x;
}
public void affecter_poids(Arbre racine)
{
if(racine.feuille==true) {racine.poids=1; }
else
{
for(int j=0;j<racine.pred.length;j++)
{
affecter_poids(racine.pred[j]);
}
racine.poids=somme_poids(racine);
}
}
mais ca ne marche pas correctement
pouvez vous m'aider svp?????
cé urgent. et merci d'avance