A voir également:
- Développement d'arbres
- L'unité de développement n'est pas installé kyocera - Forum Imprimante
- Développement math formule - Télécharger - Études & Formations
- Problème a ecosys m2030dn - Forum Imprimante
- Aide pour la réparation de mon imprimante kyocera fs c 5350 dn - Forum Imprimante
- Qcm developpement informatique - Forum Études / Formation High-Tech
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
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
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
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
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
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.@+++
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.@+++