Développement d'arbres

Fermé
Jean Pierre - 23 déc. 2003 à 17:53
 philippe - 17 déc. 2004 à 23:28
Bonjour,
Je fais un programme sur les arbres de décision qui m'empeche de dormir. Le probleme consiste à partir d'une certaine valeur, toutes les valeurs inférieures à celle ci vont a gauche et toutes les autres a droite. Je voudrai fiare une fonction récursive mais ça ne marche pas pour le moment. Je sollicite de l'aide.
Merci d'avance.

Jean Pierre

3 réponses

silfaxu Messages postés 102 Date d'inscription jeudi 18 décembre 2003 Statut Contributeur Dernière intervention 6 février 2008 11
24 déc. 2003 à 08:13
Salut,

Peux-tu préciser ton problème ? Est-ce un problème d'algorithme ou de programmation dans un langage précis ? Je précise : est-ce que tu ne sais pas comment faire ou est-ce tu sais le faire mais pas dans le langage que tu as choisi ?

sfx
0
Bonjour,

Merci de votre réponse. En fait je connais bien l'algorithme. Mon probleme est comment programmer des arbres binaires. Je voudrai utiliser une version récursive mais mon programme ne traite que pour le dernier noeud rencontré. Pour un noeud ayant deux fils, je voudrai qu'il me traite le fils gauche, ensuite le fils droit et reprend le meme principe jusqu'à ma condition d'arret. Mais actuellement mon programme ne traite que le dernier noeud (fils) rencontré et ne part pas au second fils. Du coup c'est un seul chemin que j'obtiens au lieu d'obtenir un arbre binaire au vrai sens du terme.
Merci d'avance
A tres bientot.

Jean Pierre
0
Salut Pierre,je ne sais pas trop ce que tu entend pas traiter!!! est ce l'affichage de ton arbre? ou alors l'insertion d'un noeud? je te propose qlqs fctions sur les arbres (en c++ ) en esperant que ça t'aidera un peu!!!


struct Noeud{
Noeud * gauche; // fils gauche et droit..
Noeud * droit;
int Val; // mes noeuds ont des valeurs entieres,c mon choix
};

class Arbre{
public:
Noeud * racine;
...
};
/*Avant tt Creer le noeud racine son Arbre */

void Arbre:: Creer( )
int data;
char reponse;
cout<<"entrer la valeur ds la racine"; cin>>data;
racine=InsererNoeud(data,racine) ;/*racine est 1 pteur declaré en global ds la classe */

cout<<"Inserer un autre noeud? o/n " cin>>reponse;
while(reponse== 'o')
{
cout<<"Entrer la valeur dans ce noeud : " ; cin>>data;
InsererNoeud(data,racine);
cout<<"Voulez vous Inserer un autre noeud? O/N "; cin>>rep;
}
}
/*Tu vois que j'ai appelé une fction 'InsererNoeud' Alors il faut la definir normalement avt creer( ) sinon le compilateur n'y comprendra que dalle!!! */

Noeud * Arbre::InsererNoeud(int data,Noeud * courant){
if (courant==NULL){
courant=new Noeud; //new doit etre coe (malloc) en C...
courant->gauche=NULL;
courant->droit=NULL;
courant->Val=data; //on met la donnée ds racine..
}
else
{
if (courant->Val < data)
{
courant->SAG = InsererNoeud(data,courant->SAD);
}
else
{
courant->SAD = InsererNoeud(data,courant->SAG);
}
}
return NULL;
}

/* fct d'affichage en ordre */

void Arbre::afficher(Noeud * R) {
if (R != NULL)
{
afficher(R->SAG);
cout<<R->Val ;
Afficher_Ordre(R->SAD);
}
}

/* et ainsi de suite,je ne sais pas si ça va se compiler sans faute,mais c'est juste pr te depanner un peu et te donner une idée du fctionnement du truc... */

J'espère que tu vas apprendre qlq chose ds mon baratin.@+++
0