probleme avec des pointeurs dans une liste chainee
Bonjour a tous
Je voudrais implémenter un tri en utilisant des arbres binaires de recherche. J'ai donc créé une liste chainée comportant une structure arbre. Mais j'ai des problèmes de pointeur dès que je veux ajouter un élément.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
#include <stdio.h>
#include <stdlib.h>
#include <stddef.h>
typedef struct Noeud
{
int valeur;
struct Noeud* filsGauche;
struct Noeud* filsDroit;
}Noeud;
typedef Noeud* Arbre;
void Ajouter(int valeur,Arbre* arbre)
{
//on construit le nouveau noeud
Arbre nouveau = (Arbre)malloc(sizeof(Noeud));
nouveau->valeur = valeur;
nouveau->filsDroit= NULL;
nouveau->filsGauche = NULL;
//on le place
Noeud* courant = (Arbre)malloc(sizeof(Noeud));
Noeud* precedent = NULL;
if(*arbre == NULL)
{
*arbre = (Arbre)malloc(sizeof(Noeud));
*arbre=nouveau;
}
courant=*arbre;
precedent = (Arbre)malloc(sizeof(Noeud));
while (courant)
{
precedent = courant;
if(nouveau->valeur < courant->valeur)
courant = courant->filsGauche;
else
printf("%d",courant->valeur);
courant = courant->filsDroit;
}
//maintenant qu'on a trouve une place libre on place correctement le nouveau noeud
if(noeud->valeur < precedent->valeur)
precedent->filsGauche = noeud;
else
precedent->filsDroit = noeud;
}
int main()
{
Arbre arbre=NULL;
Ajouter(15,&arbre);
Ajouter(2,&arbre);
return 0;
} |
le premier élement est bien ajouté mais j'ai une erreur de segmentation pour le deuxieme noeud.
Mon probleme est sans doute simple a résoudre mais je débute.