Une partie de mes codes d'algo-Arbre-TP2 (sauf supprimer)

Aller en bas

Une partie de mes codes d'algo-Arbre-TP2 (sauf supprimer)

Message  Le délégué le Dim 14 Mar - 22:36

Code:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

typedef struct noeud{
   int valeur;
   struct noeud *fg, *fd;
}Noeud, *Arbre;

Arbre creerNoeud(int x){
   Arbre tmp;
   tmp = (Arbre) malloc(sizeof(Arbre));
   if (tmp!=NULL){   
      (*tmp).valeur = x;
      (*tmp).fg = NULL;
      (*tmp).fd = NULL;   
   }
   return tmp;
}

int ajoutArbre(Arbre *A, int val){
   if((*A) == NULL){
      (*A)=creerNoeud(val);
      if(*A!=NULL) return 1;
      else return 0;
   }
   if((*A)->valeur >= val){
      return ajoutArbre(&(*A)->fg,val);
   }
   if((*A)->valeur < val){
      return ajoutArbre(&(*A)->fd,val);
   }
   return 1;
}

Arbre recherche(Arbre A, int val){
   while( (A!=NULL) && (A->valeur != val) ){
      if(A->valeur <val){   
         A=A->fg;
      }
      else{
         A=A->fd;
      }
   }
   return A;
}


int rechercheOccurence(Arbre A, int x){
   int cpt=0;
   while( A!=NULL ){
      if( x > A->valeur){
         A=A->fd;
      }
      else if ( x < A->valeur){
         A=A->fg;
      }
      else{
         cpt++;
         A=A->fg;
      }
   }
   return cpt;
}


Arbre ExtraireMin(Arbre *A){
   Arbre tmp;
   if((*A) == NULL){
      return *A;
   }
   if( (*A)->fg == NULL ){
      tmp=(*A);
      (*A)=(*A)->fd;
      tmp->fd=NULL;
      return tmp;
   }
   return ExtraireMin( &(*A)->fg);
}
   

Arbre ExtraireMax(Arbre *A){
   Arbre tmp;
   if((*A) == NULL){
      return *A;
   }
   if((*A)->fd==NULL){
      tmp=(*A);
      (*A)=(*A)->fg;
      tmp->fg=NULL;
      return tmp;
   }
   return ExtraireMax( &(*A)->fd);
}

int Supprime(Arbre *a, int x){
   Arbre tmp;
   if(*a ==NULL){
      return 0;
   }
   if( (*a)->valeur > x){
      return Supprime( &((*a)->fg), x);
   }
   if( (*a)->valeur < x){
      return Supprime( &((*a)->fd), x);
   }
   
   if( (*a)->fg == NULL ){
      tmp = *a;
      *a = (*a)->fd;
      free(tmp);
      return 1;
   }
   else if( (*a)->fd== NULL ){
      tmp = *a;
      *a = (*a)->fg;
      free(tmp);
      return 1;
   }
   else{   
      tmp=ExtraireMin( &((*a)->fd) );
      (*a)->valeur=tmp->valeur;
      free(tmp);
      return 1;
   }
}

void afficherarbreProf(Arbre A)
{
   if(A != NULL)
   {
      printf("%d ",A -> valeur);      
         afficherarbreProf(A -> fg);      
         afficherarbreProf(A -> fd);      
   }
}


int main( int argc, char* argv[] ){
   Arbre A = NULL;
   ajoutArbre(&A,10);
   ajoutArbre(&A,11);
   ajoutArbre(&A,12);
   ajoutArbre(&A,1);
   ajoutArbre(&A,1);
   ajoutArbre(&A,1);
   afficherarbreProf(A);
   
   int val =13;
   printf("nombre occurence de %d : %d\n",val,rechercheOccurence(A,val) );
   return 1;
}
___________________________________________
Fin de la partie I
___________________________________________

Code:
#include <stdlib.h>
#include <stdio.h>
#include <unistd.h>

typedef struct noeud{
   int valeur, hauteur;
   struct noeud *fg, *fd;
}Noeud, *Arbre;

Arbre creerNoeud(int x,int hauteur){
   Arbre tmp;
   tmp = (Arbre) malloc(sizeof(Arbre));
   if (tmp!=NULL){   
      (*tmp).valeur = x;
      (*tmp).valeur = hauteur;
      (*tmp).fg = NULL;
      (*tmp).fd = NULL;   
   }
   return tmp;
}

int ajoutArbre2(Arbre *A, int val, int hauteur){
   if((*A) == NULL){
      (*A)=creerNoeud(val,hauteur);
      if(*A!=NULL) return 1;
      else return 0;
   }
   if((*A)->valeur >= val){
      return ajoutArbre2(&(*A)->fg,val,hauteur++);
   }
   if((*A)->valeur < val){
      return ajoutArbre2(&(*A)->fd,val,hauteur++);
   }
   return 1;
}
int ajoutArbre(Arbre *A, int val){
   int hauteur=0;
   return ajoutArbre2(A,val, hauteur);
}

Arbre recherche(Arbre A, int val, int hauteur){
   while( (A!=NULL) && (A->valeur != val) && hauteur <= A->hauteur ){
      if(A->valeur <val){   
         A=A->fg;
      }
      else{
         A=A->fd;
      }
   }
   return A;
}


int rechercheOccurence(Arbre A, int x, int hauteur){
   int cpt=0;
   while( A!=NULL ){
      if( x > A->valeur && hauteur <= A->hauteur){
         A=A->fd;
      }
      else if ( x < A->valeur && hauteur <= A->hauteur){
         A=A->fg;
      }
      else{
         cpt++;
         A=A->fg;
      }
   }
   return cpt;
}


Arbre ExtraireMin(Arbre *A){/*Je n'ai pas trouvé le moyen de rendre plus interressant l'algo en connaissant la hauteur, je laisse donc la fonction en état*/
   Arbre tmp;
   if((*A) == NULL){
      return *A;
   }
   if( (*A)->fg == NULL){
      tmp=(*A);
      (*A)=(*A)->fd;
      tmp->fd=NULL;
      return tmp;
   }
   return ExtraireMin( &(*A)->fg);
}
   

Arbre ExtraireMax(Arbre *A){/*Je n'ai pas trouvé le moyen de rendre plus interressant l'algo en connaissant la hauteur, je laisse donc la fonction en état*/
   Arbre tmp;
   if((*A) == NULL){
      return *A;
   }
   if((*A)->fd==NULL){
      tmp=(*A);
      (*A)=(*A)->fg;
      tmp->fg=NULL;
      return tmp;
   }
   return ExtraireMax( &(*A)->fd);
}

int SupprimeHauteur(Arbre *a){
   
}

void afficherarbreProf(Arbre A)
{
   if(A != NULL)
   {
      printf("%d ",A -> valeur);      
         afficherarbreProf(A -> fg);      
         afficherarbreProf(A -> fd);      
   }
}


int main( int argc, char* argv[] ){
   Arbre A = NULL;
   ajoutArbre(&A,10);
   ajoutArbre(&A,11);
   ajoutArbre(&A,9);
   ajoutArbre(&A,7);
   ajoutArbre(&A,8);
   ajoutArbre(&A,8);

   return 1;
}

Le délégué
Admin
Admin

Messages : 42
Date d'inscription : 24/09/2009
Age : 30
Localisation : Combs/Rennes

http://filiereoc.forumactif.org

Revenir en haut Aller en bas

Revenir en haut

- Sujets similaires

 
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum