Problème pointeur en c++

Signaler
Messages postés
4
Date d'inscription
mardi 12 octobre 2004
Statut
Membre
Dernière intervention
26 avril 2005
-
Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
-
Bonjour

j'ai un problème avec une partie de code , lorsque je créer mon arbre binaire jai un message d'erreur lorsque je rappel ma fonction récursive . Voici les bout de code qui peuvent aider

les structures de travail
----------------------------------------------------------
typedef struct Noeud
{
int valeur;
struct Noeud * filsGauche, * filsDroit;
} Noeud;

typedef struct
{
Noeud * racine;
} ArbreBinaire
----------------------------------

le prototype
--------------------------------
void chargerDonnees (ArbreBinaire *arbre);
----------------------------------

Le main
----------------------------------

void main ()
{

// Déclaration de variables

int Choix; // Choix entrée de l'usager

ArbreBinaire * arbre = new ArbreBinaire;

//traitement de la racine , création d'un noeud
arbre->racine = new Noeud;

// Initilalisation des pointeurs de l'arbre
arbre->racine->filsGauche = NULL;
arbre->racine->filsDroit = NULL;

----------------------------------

la fonction
----------------------------------

void chargerDonnees (ArbreBinaire *arbre)
{

int nombre; // valeur entrée par l'usager

cout << "Entrez un nombre à entrer dans l'arbre:" ;
cin >> nombre;

if(arbre == NULL)
{
return;
}
//si filsDroit est plus petit valeur
else if(nombre <= arbre->racine->valeur)
{
//si le noeud filsDroit existe pas on doit en créer un nouveau
if(arbre->racine->filsGauche == NULL)
{
arbre->racine->filsGauche = new Noeud;
arbre->racine->filsGauche->filsGauche = NULL;
arbre->racine->filsGauche->filsDroit = NULL;

//on assigne la valeur reçu
arbre->racine->filsGauche->valeur = nombre;
}
else
{
//on rappel la fonction pour continu la création de l'arbre
chargerDonnees (arbre->racine->filsGauche );
}
}
else if(nombre > arbre->racine->valeur)
{
//si le noeud filsGauche existe pas on doit en créer un nouveau
if(arbre->racine->filsDroit == NULL)
{
arbre->racine->filsDroit = new Noeud;
arbre->racine->filsDroit->filsDroit = NULL;
arbre->racine->filsDroit->filsGauche = NULL;

//on assigne la valeur reçu
arbre->racine->filsDroit->valeur = nombre;

return;
}
else
{
//on rappel la fonction pour continu la création de l'arbre
chargerDonnees(arbre->racine->filsDroit);
}
}

}

----------------------------------

1 réponse

Messages postés
2070
Date d'inscription
mardi 22 avril 2003
Statut
Membre
Dernière intervention
3 juillet 2006
8
la fonction chargerDonnees attend un pointeur sur une structure ArbreBinaire. Or dans la récuresion, tu passe un pointeur sur un Noeud (les fils gauche et droit)
=> en mettant comme paramètre un pointeur sur une structure Noeud ça devrait aller.

Pour commencer la récursion, il suffira de passer un pointeur sur la racine de l'arbre.