En fait, je l'ai presque terminé, vous trouverez le code ci dessous.
ce qui me bloque en ce moment c'est affichage, car quand j'utilise juste la methode pour le parcours préfixe, tout marche bien mais quand j'utilise ensuite les mothodes infixe et postfixe il ne se compile pas.
et comme je l'ai dit, je ne suis pas un expert alors pourriez vous me dire ou est ce que je me bloque !!
merci
#include <stdio.h>
#include <stdlib.h>
#define true 1
#define false 0
struct N
{
int r ;
struct N* g ;
struct N* d ;
};
typedef struct N TN;
typedef struct N* NODE;
/****************************************Création d'un arbre vide***************************************/
NODE NewArbreVide( void )
{
return NULL;
}
/************************************************Fin*****************************************************/
/****************************************Ajout des éléments**********************************************/
void Add( NODE* ARBRE , int VAL )
{
if( *ARBRE == NULL )
{
*ARBRE = ( NODE)malloc( sizeof( TN ) );
(*ARBRE)->r = VAL ;
(*ARBRE)->g = NULL ;
(*ARBRE)->d = NULL ;
}
else
{
if( VAL < (*ARBRE)->r)
{
Add( &(*ARBRE)->g , VAL ) ;
}
else
{
Add( &(*ARBRE)->d , VAL ) ;
}
}
}
/************************************************Fin*****************************************************/
/****************************************Recherche des éléments******************************************/
int search(NODE ARBRE,int va)
{
int trouve=false;
while(ARBRE&&!trouve)
{
if(ARBRE->r==va)
trouve=true;
else
{
if(var)
ARBRE=ARBRE->g;
else
ARBRE=ARBRE->d;
}
}
return trouve;
}
/************************************************Fin*****************************************************/
/****************************************L'affichage de l'arbre******************************************/
void ShowPrefixe( NODE ARBRE)
{
if( ARBRE != NULL )
{
printf( "%d " , ARBRE->r ) ;
ShowPrefixe( ARBRE->g ) ;
ShowPrefixe( ARBRE->d ) ;
}
}
void ShowInfixe( NODE ARBRE)
{
if( ARBRE != NULL )
{
printf( "%d " , ARBRE->g ) ;
ShowPrefixe( ARBRE->r ) ;
ShowPrefixe( ARBRE->d ) ;
}
}
void ShowPostfixe( NODE ARBRE)
{
if( ARBRE != NULL )
{
printf( "%d " , ARBRE->g ) ;
ShowPrefixe( ARBRE->d ) ;
ShowPrefixe( ARBRE->r ) ;
}
}
/************************************************Fin*****************************************************/
/****************************************La suppression de l'arbre******************************************/
int DeleteElement(NODE* ARBRE, int inf)
{
NODE temp=NULL;
NODE temp1=NULL;
int inftemp=0;
int elementSupprimer=false;
if(*ARBRE == NULL)
elementSupprimer=false;
else
{
if((*ARBRE)->rd,inf);
else if((*ARBRE)->r>inf)
elementSupprimer=DeleteElement(&(*ARBRE)->g,inf);
else
{
elementSupprimer=true;
if((*ARBRE)->g==NULL)
{
temp=*ARBRE;
(*ARBRE)=(*ARBRE)->d;
free(temp);
}
else
{
if((*ARBRE)->d==NULL)
{
temp=*ARBRE;
(*ARBRE)=(*ARBRE)->g;
free(temp);
}
else
{
//On remplace l'élément supprimer par le plus petit élément de son sous arbre droit
//Cherchons alors cet élément
temp=(*ARBRE);
temp=temp->d;
while(temp->g)
{
temp1=temp;
temp=temp->g;
}
//s'il n'y a plus de fils gauche, alors c'est lui le plus petit élément donc on le supprime
inftemp=temp->r;
if(temp->d)
{
temp1->g=temp->d;
free(temp);
}
(*ARBRE)->r=inftemp;
elementSupprimer=true;
}
}
}
}
return elementSupprimer;
}
/************************************************Fin*****************************************************/
/***************************************changement de la valeur******************************************/
void changerval(NODE* ARBRE, int inf)
{
(*ARBRE)->r=inf;
}
/************************************************Fin*****************************************************/
/************************************************Main****************************************************/
int main()
{
NODE ARBRE;
int n,z;
int test=0;
int d=0;
int l=0;
char a;
ARBRE=NewArbreVide();
Add( &ARBRE , 18);
Add( &ARBRE , 10);
Add( &ARBRE , 3);
Add( &ARBRE , 15);
Add( &ARBRE , 14);
Add( &ARBRE , 11);
Add( &ARBRE , 16);
Add( &ARBRE , 42);
Add( &ARBRE , 23);
Add( &ARBRE , 32);
Add( &ARBRE , 27);
Add( &ARBRE , 59);
Add( &ARBRE , 78);
Add( &ARBRE , 98);
Add( &ARBRE , 51);
Add( &ARBRE , 70);
Add( &ARBRE , 62);
int choix;
printf(" ==========Menu========== \n");
printf("1 . Parcours Prefixe\n");
printf("2 . Parcours Infixe\n");
printf("3 . Parcours Postfixe\n");
printf("Votre choix");scanf("%d", &choix);
switch (choix)
{
case 1 :
printf("| Le parcours prefixe de l'arbre est: |\n");
printf("\t");ShowPrefixe(ARBRE);printf("\n");
//changer la valeur de l'élément:
printf("|\t Donner la valeur a modifier: ");
scanf("%d",&n);
printf("\n");
test=search(ARBRE,n);
if(!test)
printf("La valeur propose n'existe dans l'arbre. \n\n");
else{
printf("\t Donner la nouvelle valeur :");
scanf("%d",&z);
l=search(ARBRE,z);
printf("\n");
while(l){
printf("\t Donner la nouvelle valeur :");
scanf("%d",&z);
printf("\n");
l=search(ARBRE,z);
}
d=DeleteElement(&ARBRE,n);
Add( &ARBRE , z);
printf("\n");
printf("Le nouveau parcours prefixe de l'arbre est :\n");
printf("\t");ShowPrefixe(ARBRE);
printf("\n\n");
a=getchar();}
break;
case 2 :
printf("| Le parcours Infixe de l'arbre est: |\n");
printf("\t");ShowInfixe(ARBRE);printf("\n");
//changer la valeur de l'élément:
printf("|\t Donner la valeur a modifier: ");
scanf("%d",&n);
printf("\n");
test=search(ARBRE,n);
if(!test)
printf("La valeur propose n'existe dans l'arbre. \n\n");
else{
printf("\t Donner la nouvelle valeur :");
scanf("%d",&z);
l=search(ARBRE,z);
printf("\n");
while(l){
printf("\t Donner la nouvelle valeur :");
scanf("%d",&z);
printf("\n");
l=search(ARBRE,z);
}
d=DeleteElement(&ARBRE,n);
Add( &ARBRE , z);
printf("\n");
printf("Le nouveau parcours infixe de l'arbre est :\n");
printf("\t");ShowInfixe(ARBRE);
printf("\n\n");
a=getchar();}
break;
default :
printf("| Le parcours postfixe de l'arbre est: |\n");
printf("\t");ShowPostfixe(ARBRE);printf("\n");
//changer la valeur de l'élément:
printf("|\t Donner la valeur a modifier: ");
scanf("%d",&n);
printf("\n");
test=search(ARBRE,n);
if(!test)
printf("La valeur propose n'existe dans l'arbre. \n\n");
else{
printf("\t Donner la nouvelle valeur :");
scanf("%d",&z);
l=search(ARBRE,z);
printf("\n");
while(l){
printf("\t Donner la nouvelle valeur :");
scanf("%d",&z);
printf("\n");
l=search(ARBRE,z);
}
d=DeleteElement(&ARBRE,n);
Add( &ARBRE , z);
printf("\n");
printf("Le nouveau parcours postfixe de l'arbre est :\n");
printf("\t");ShowPostfixe(ARBRE);
printf("\n\n");
a=getchar();}
break;
}
return 0;
}
/************************************************Fin*****************************************************/