manchester23 | salut ,
j'ai essayer de faire un programme qui recherche une valeur dans un arbre, Normalement il me retourn l'adresse de la valeur a rechercher si trouver.
je ne sais pas pourquoi ne sa marche pas. Merci pour votre aide
Code :
- #include<stdio.h>
- #include<stdlib.h>
- /*******************declaration de l'arbre*********************/
- typedef struct elt{ int info;
- struct elt *succ_gauche,*succ_droit;
- }arbre;
- /*******************Les primitives*********************/
- int arbre_vide(arbre *a)
- {
- if(a==NULL)
- return 1;
- else
- return 0;
- }
- int feuille(arbre *a)
- {
- if(a->succ_droit==a->succ_gauche==NULL)
- return 1;
- else
- return 0;
- }
- arbre *fils_gauche(arbre *a)
- {
- return(a->succ_gauche);
- }
- arbre *fils_droite(arbre *a)
- {
- return(a->succ_droit);
- }
- /*******************Insertion*********************/
- void insere(arbre *a, int val, arbre **pere)
- {
- arbre *p;
- if(!arbre_vide(a))
- {
- if(val==a->info)
- return;
- else
- {
- *pere=a;
- if(a->info>val)
- insere(fils_gauche(a),val,&pere);
- else
- insere(fils_droite(a),val,&pere);
- }
- }
- else
- {
- p=(arbre*)malloc(sizeof(arbre));
- p->info=val;
- p->succ_gauche=p->succ_droit=NULL;
- if((*pere)->info>val)
- (*pere)->succ_gauche=p;
- else
- (*pere)->succ_droit=p;
- }
- }
- /****************La Recherche*******************/
- arbre* recherche(arbre *a, int val)
- {
- arbre *adr=NULL;
- if(!arbre_vide(a))
- {
- if(a->info==val) adr=a;
- else if(!feuille(a))
- {
- if(a->info >val)
- recherche(fils_gauche(a),val);
- else
- recherche(fils_droite(a),val);
- }
- }
- return (adr);
- }
- /******************* Main()*********************/
- int main(void)
- {
- arbre *racine,*pere,*adr=NULL,*k;
- int n,val,i,x;
- printf("\ncombien de nombre vous voulez entrer: " );
- scanf("%d",&n);
- printf("\ndonner la premier valeur: " );
- scanf("%d",&val);
- racine=(arbre*)malloc(sizeof(arbre));
- racine->info=val;
- racine->succ_gauche=racine->succ_droit=NULL;
- for(i=1; i<n; i++)
- {
- printf("\ndonner un nombre: " );
- pere=NULL;
- printf("%d ",racine->info);
- insere(racine,val,&pere);
- }
- printf("\n donner une valeur a chercher:" );
- scanf("%d",&x);
- adr=recherche(racine,x);
- if(adr!=NULL)
- printf("la valeur existe l'adresse est %d",adr);
- else
- printf("Votre valeur n'existe pas" );
- }
|
|