Parcours d'un arbre

eglentine Messages postés 5 Statut Membre -  
eglentine Messages postés 5 Statut Membre -
Bonjour,
g écrit un programme qui construit un arbre a partir d'une liste chainé
cad les élément de la liste contiennent les champs fils gauche et fils droit
mais voila lors du parcours prefixe de l'arbre, j'ai droit a un affichage qui ne s'arréte pas et qui n'est meme pas juste.
je c que la fonction est correcte car je l'ai essayé sur un autre arbre et ca marche, mais sur mon arbre ca ne marche pas.
g aussi esseyé de parcourir sans la fonction prefixe pour voir si le chainage est bien fait et il m'affiche le resultat correcte.
donc est ce que quelqu'un peu voir si mon programme est correcte
merciii d'avance.

#include<stdio.h>
#include<stdlib.h>
#include<conio.h>
#include<math.h>
typedef struct elt {int valeur;
struct elt *fg;
struct elt *fd;
struct elt *suivt;}liste;
liste *r;
int vide(liste *r)
{if (r==NULL) return(1);
else return(0);}
int feuille(liste *r)
{if (r->fg==NULL && r->fd==NULL) return(1);
else return(0);}
liste *filsgauche(liste *r)
{return(r->fg);}
liste *filsdroit(liste *r)
{return(r->fd);}
void prefixe(liste *r)
{if (!vide(r))
{printf("%d",r->valeur);
if (!feuille(r))
{prefixe(filsgauche(r));
prefixe(filsdroit(r));}
}
}
int main()
{
liste *p;liste *tete,*z,*q,*sauv,*tri,*o,*var,*g,*save,*w;
int val1,val2,h,i,n;
bool b;
b=true;
////////**********creation de la liste*************////////////
tete=(liste*)malloc(sizeof(liste));
printf("entrer n:",n);
scanf("%d",&n);
printf("entrer h:");
scanf("%d",&h);
tete->valeur=h;
o=tete;
i=1;
while (i<n)
{p=(liste*)malloc(sizeof(liste));
printf("entrer h:",h);
scanf("%d",&h);
p->valeur=h;
p->fg=NULL;
p->fd=NULL;
o->suivt=p;
o=p;
i++;}
p->suivt=NULL;
///////******affichage de la liste*******/////////
g=tete;
while (g!=NULL)
{printf("%d",g->valeur);
g=g->suivt;}
printf("\n");
///////////////**********construction de l'arbre**********//////////
while (tete->suivt!=NULL)
{p=tete;
val1=p->valeur;
p=p->suivt;
save=p;
val2=p->valeur;
sauv=p->suivt;
p=(liste*)malloc(sizeof(liste));
p->valeur=val1+val2;
printf("%d\n",p->valeur);
p->fg=tete;
p->fd=save;
p->suivt=sauv;
tete=p;
z=tete->suivt;
if (z!=NULL)
{q=z->suivt;
if (q!=NULL)
{val1=z->valeur;

val2=q->valeur;

}}

p=tete;
/////********** les deux inferieurs ou egales*********///////////////
while ((q!=NULL)&&(z!=NULL)&&(val1<=p->valeur)&&(val2<=p->valeur))
{sauv=p;
p=(liste*)malloc(sizeof(liste));
p->valeur=val1+val2;
printf("%d\n",p->valeur);
p->fg=z;
p->fd=q;
sauv->suivt=p;
p->suivt=q->suivt;
z=p->suivt;
if (z!=NULL)
{q=z->suivt;
if (q!=NULL)
{val1=z->valeur;
val2=q->valeur;

}}

}
////////******les deux superieur*****///////////
if ((q!=NULL)&&(z!=NULL)&&(val1>=p->valeur)&&(val2>p->valeur))
{p=tete;}
else /////////****** l'un inferieur et l'autre superieur*********//////////
if ((q!=NULL)&&(z!=NULL)&&(val1<p->valeur)&&(val2>=p->valeur))
{p=tete;
while (b==true)
{b=false;
tri=p->suivt;
while(p->suivt!=NULL)
{if(p->valeur>tri->valeur)
{if (p==tete)
{var= tri->suivt;
tri->suivt=p;
p->suivt=var;
tete=tri;
tri=p->suivt;

}
else
if (tri->suivt!=NULL)
{var=tri->suivt;

tri->suivt=p;
sauv->suivt=tri;
p->suivt=var;
tri=p->suivt;
}
else
{tri->suivt=p;
sauv->suivt=tri;

p->suivt=NULL;
}
b=true;
}
else
{sauv=p;
p=p->suivt;
tri=p->suivt;
}
}
p=tete;
}
g=tete;
while (g!=NULL)
{printf("%d\n",g->valeur);

g=g->suivt;}
}
else /////////**********un seul element dans la liste******/////////////
if ((q==NULL)&&(z!=NULL))
{
if (p->valeur>z->valeur)
{b=true;
p=tete;
while ((b==true)&&(p->suivt!=NULL))
{
b=false;
tri=p->suivt;
while(p->suivt!=NULL)
{if(p->valeur>tri->valeur)
{if (p==tete)
{var= tri->suivt;

tri->suivt=p;
p->suivt=var;
tete=tri;
tri=p->suivt;
}
else
if (tri->suivt!=NULL)
{var=tri->suivt;

tri->suivt=p;
sauv->suivt=tri;
p->suivt=var;
tri=p->suivt;
}
else
{tri->suivt=p;

sauv->suivt=tri;
p->suivt=NULL;
}
b=true;
}
else
{sauv=p;

p=p->suivt;
tri=p->suivt;}
}

p=tete;
}
}

g=tete;
while (g!=NULL)
{printf("%d\n",g->valeur);
g=g->suivt;}
}
}
printf("\n\n\n\n");
prefixe(tete);
getche();
}

1 réponse

eglentine Messages postés 5 Statut Membre
 
bonjour,
je voulais vous remerciez pour vos nombreuse réponses.
0