A voir également:
- [C++] parcours d'arbre ternaire
- Mes parcours google - Guide
- Arbre généalogique famille michelin - Télécharger - Généalogie
- Animation parcours 3d gratuit - Télécharger - Transports & Cartes
- Arbre genealogique windsor - Télécharger - Généalogie
- L'arbre Généalogique de la famille - Télécharger - Généalogie
7 réponses
s'il vous plait, j'ai vraiment besoin de vous !
je viens encore vous redemander de l'aide sur un parcours d'arbre ternaire en récursif!
merci beaucoup!
je viens encore vous redemander de l'aide sur un parcours d'arbre ternaire en récursif!
merci beaucoup!
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#define size 100
//definition d'un noeud
typedef struct noeudarbre *point;
typedef struct noeudarbre
{
char valeur;
point droite,gauche;
};
point tab[size];
int sommet=0,base=0;
point fils[size];
int front=0,rear=-1;
void affich_menu(void);
point lirarbre(char *ch);
void empiler(point c);
point depiler(void);
void emfiler(point c);
point defiler(void);
void p_lvr(point c);
void p_lrv(point c);
void p_vlr(point c);
void p_p_n(point c);
int alpha(char);
/*****************************************************************/
/*********************** Programme principal *********************/
int main()
{
/* Declaration des variables et initialisation */
char arbre[20];
int choix = -1;
while(choix != 0)
{
/* affichage du menu */
affich_menu();
/* saisie du choix */
printf("\tVotre choix:\n");
scanf("%d",&choix);
/* acces au choix demandé */
switch(choix)
{
case 1: {
printf("lire arbre:-->\n");
printf("entrer l'arbre exprission parenthésée:\n\n");
scanf("%s",arbre);
point lirarbre(char arbre);
break;
}
case 2: {
printf("parcoure (lvr):-->\n");
void p_lvr(point c);
break;
}
case 3: {
printf("parcoure (lrv):-->\n");
void p_lrv(point c);
break;
}
case 4: {
printf("parcoure (vlr):-->\n");
void p_vlr(point c);
break;
}
case 5: {
printf("parcoure (par niveau):-->\n");
p_p_n(tab[0]);
break;
}
case 0:break;
default :{
printf("Choix impossible.\n");
break;
}
}
printf("\n\n");
}
}
/***************************************************************/
/************************ Definition des prototypes ************/
/***************************************************************/
/* Nom de la fonction:affich_menu */
/* But:affiche le menu */
/* Entrees: */
/* Sorties: */
/***************************************************************/
void affich_menu()
{
printf("\t\tManipulation d'arbre binaire:\n\n");
printf("\t1-> Creation d'un arbre binaire.\n");
printf("\t2-> parcore lvr(infixé-->inorder).\n");
printf("\t3-> parcore lrv (postfixé-->postorder).\n");
printf("\t4-> parcore vlr (préfixé-->preoder).\n");
printf("\t5-> parcore par niveau.\n");
printf("\t0-> Quitter\n\n");
}
point lirarbre(char *ch)
{
int statut=0;
int i;
point p,r;
for(i=0;i<strlen(ch);i++)
{
printf("\ntraitement de %c\n",ch[i]);
if(alpha(ch[i]))
{
p=(point)malloc(sizeof (noeudarbre));
if(p!=NULL)printf("\npointeur crée\n");
p->valeur=ch[i];
if(p->valeur==ch[i])printf ("valeur ajoutée");
p->droite=NULL;
p->gauche=NULL;
if (statut==1)tab[sommet-1]->gauche=p;
if (statut==2) tab[sommet-1]->droite=p;
if (ch[i+1]=='(')empiler(p);
}
if(ch[i]==')')r=depiler ();
if(ch[i+1]==',') statut=2;
if(ch[i]=='(')
{
if(ch[i+1]==',') statut=2;
else
statut=1;
}
}
}
void empiler(point c)
{
if(sommet<20)
{
tab[sommet]=c;
sommet++;
}
else
{
printf("pile pleine");
exit(-1);
}
}
point depiler()
{
if(sommet!=base)
{
sommet--;
return tab[sommet];
}
else
return NULL;
}
void emfiler(point c)
{ rear=(rear-1)%size;
if(front==rear)
rear= (rear-1)%size;
else
fils[rear]=c;
}
point defiler(void)
{
if(front!=rear)
rear=(rear-1)%size;
return fils[rear];
}
/*parcours postfixé (postorder)*/
void p_lrv(point c)
{ int fin;
fin=0;
do{
while(c!=NULL)
{empiler(c);
printf("%c",c->valeur);
c=c->gauche;
}
if(sommet>=0)
{ c=depiler();
c=c->droite;
}
else fin=1;
}while(fin==0);
}
/*parcours infixé(inorder)*/
void p_lvr(point c)
{ int fin;
fin=0;
do{
while(c!=NULL)
{empiler(c);
c=c->gauche;
}
c=depiler();
if(c!=NULL)
{ printf("%c",c->valeur);
c=c->droite;
}
else
fin=1;
}while(!fin);
}
/*parcours préfixé (preorder)*/
void p_vlr(point c)
{ int fin=0;
do{
while(c!=NULL)
{empiler(c);
c=c->gauche;
}
if(sommet>=0)
{ c=depiler();
printf("%c",c->valeur);
c=c->droite;
}
else fin=1;
}while(fin==0) ;
}
//fonction d'affichage
void p_p_n(point c)
{
if(c!=NULL)
{
printf("*** %c fils droit %c fils gauche %c\n",c->valeur,c->droite->valeur,c->gauche->valeur);
p_p_n(c->gauche);
p_p_n(c->droite);
}
}
int alpha(char b)
{
char val[26]="z";
int i;
for(i=0;i<27;i++)if(val[i]==b)return 1;
return 0;
}
#include<string.h>
#include<stdlib.h>
#define size 100
//definition d'un noeud
typedef struct noeudarbre *point;
typedef struct noeudarbre
{
char valeur;
point droite,gauche;
};
point tab[size];
int sommet=0,base=0;
point fils[size];
int front=0,rear=-1;
void affich_menu(void);
point lirarbre(char *ch);
void empiler(point c);
point depiler(void);
void emfiler(point c);
point defiler(void);
void p_lvr(point c);
void p_lrv(point c);
void p_vlr(point c);
void p_p_n(point c);
int alpha(char);
/*****************************************************************/
/*********************** Programme principal *********************/
int main()
{
/* Declaration des variables et initialisation */
char arbre[20];
int choix = -1;
while(choix != 0)
{
/* affichage du menu */
affich_menu();
/* saisie du choix */
printf("\tVotre choix:\n");
scanf("%d",&choix);
/* acces au choix demandé */
switch(choix)
{
case 1: {
printf("lire arbre:-->\n");
printf("entrer l'arbre exprission parenthésée:\n\n");
scanf("%s",arbre);
point lirarbre(char arbre);
break;
}
case 2: {
printf("parcoure (lvr):-->\n");
void p_lvr(point c);
break;
}
case 3: {
printf("parcoure (lrv):-->\n");
void p_lrv(point c);
break;
}
case 4: {
printf("parcoure (vlr):-->\n");
void p_vlr(point c);
break;
}
case 5: {
printf("parcoure (par niveau):-->\n");
p_p_n(tab[0]);
break;
}
case 0:break;
default :{
printf("Choix impossible.\n");
break;
}
}
printf("\n\n");
}
}
/***************************************************************/
/************************ Definition des prototypes ************/
/***************************************************************/
/* Nom de la fonction:affich_menu */
/* But:affiche le menu */
/* Entrees: */
/* Sorties: */
/***************************************************************/
void affich_menu()
{
printf("\t\tManipulation d'arbre binaire:\n\n");
printf("\t1-> Creation d'un arbre binaire.\n");
printf("\t2-> parcore lvr(infixé-->inorder).\n");
printf("\t3-> parcore lrv (postfixé-->postorder).\n");
printf("\t4-> parcore vlr (préfixé-->preoder).\n");
printf("\t5-> parcore par niveau.\n");
printf("\t0-> Quitter\n\n");
}
point lirarbre(char *ch)
{
int statut=0;
int i;
point p,r;
for(i=0;i<strlen(ch);i++)
{
printf("\ntraitement de %c\n",ch[i]);
if(alpha(ch[i]))
{
p=(point)malloc(sizeof (noeudarbre));
if(p!=NULL)printf("\npointeur crée\n");
p->valeur=ch[i];
if(p->valeur==ch[i])printf ("valeur ajoutée");
p->droite=NULL;
p->gauche=NULL;
if (statut==1)tab[sommet-1]->gauche=p;
if (statut==2) tab[sommet-1]->droite=p;
if (ch[i+1]=='(')empiler(p);
}
if(ch[i]==')')r=depiler ();
if(ch[i+1]==',') statut=2;
if(ch[i]=='(')
{
if(ch[i+1]==',') statut=2;
else
statut=1;
}
}
}
void empiler(point c)
{
if(sommet<20)
{
tab[sommet]=c;
sommet++;
}
else
{
printf("pile pleine");
exit(-1);
}
}
point depiler()
{
if(sommet!=base)
{
sommet--;
return tab[sommet];
}
else
return NULL;
}
void emfiler(point c)
{ rear=(rear-1)%size;
if(front==rear)
rear= (rear-1)%size;
else
fils[rear]=c;
}
point defiler(void)
{
if(front!=rear)
rear=(rear-1)%size;
return fils[rear];
}
/*parcours postfixé (postorder)*/
void p_lrv(point c)
{ int fin;
fin=0;
do{
while(c!=NULL)
{empiler(c);
printf("%c",c->valeur);
c=c->gauche;
}
if(sommet>=0)
{ c=depiler();
c=c->droite;
}
else fin=1;
}while(fin==0);
}
/*parcours infixé(inorder)*/
void p_lvr(point c)
{ int fin;
fin=0;
do{
while(c!=NULL)
{empiler(c);
c=c->gauche;
}
c=depiler();
if(c!=NULL)
{ printf("%c",c->valeur);
c=c->droite;
}
else
fin=1;
}while(!fin);
}
/*parcours préfixé (preorder)*/
void p_vlr(point c)
{ int fin=0;
do{
while(c!=NULL)
{empiler(c);
c=c->gauche;
}
if(sommet>=0)
{ c=depiler();
printf("%c",c->valeur);
c=c->droite;
}
else fin=1;
}while(fin==0) ;
}
//fonction d'affichage
void p_p_n(point c)
{
if(c!=NULL)
{
printf("*** %c fils droit %c fils gauche %c\n",c->valeur,c->droite->valeur,c->gauche->valeur);
p_p_n(c->gauche);
p_p_n(c->droite);
}
}
int alpha(char b)
{
char val[26]="z";
int i;
for(i=0;i<27;i++)if(val[i]==b)return 1;
return 0;
}
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
aide moi comment j'affiche le menu d'une base de données pour sortis avec un petit logiciel ( je travail avec l'accese)