lonsomehell

arbre

Apr 25th, 2013
110
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.71 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. //recap du cours.
  4. typedef struct arbre arbre;
  5. struct arbre//structure arbre.
  6. {
  7.     int value;
  8.     arbre *ag;//fils gauche.
  9.     arbre *ad;//fils droite.
  10. };
  11. //arbre à gauche inferieur à la racine.
  12. //arbre à droite superieur à la racine.
  13. void construct(arbre **abr,int el)//Créer un arbre constitué d’une seule feuille.
  14. {
  15.     *(abr)=malloc(sizeof(arbre));
  16.     (*abr)->ag=(*abr)->ad=NULL;
  17.     (*abr)->value=el;
  18. }
  19. int supAbr(arbre *abr)//Retourne le Sup d'un arbre.
  20. {
  21.     if(abr){
  22.         if(!(abr->ad))//Pas d'element superieur au élément courant.
  23.             return abr->value;
  24.         else
  25.             return supAbr(abr->ad);
  26.     }
  27.     else{
  28.         printf("Erreur\n");
  29.     }
  30. }
  31. int infAbr(arbre *abr)//Retourne le Inf d'un arbre.
  32. {
  33.     if(abr){
  34.         if(!(abr->ag))//Pas d'element inferieur au élément courant.
  35.             return abr->value;
  36.         else
  37.             return infAbr(abr->ag);
  38.     }
  39.     else{
  40.         printf("Erreur\n");
  41.     }
  42. }
  43. void associee(arbre *abr,arbre *ag,arbre *ad)
  44. {
  45.     if(abr)
  46.     {
  47.         if ((abr->value<infAbr(ad))&&(abr->value>supAbr(ag)))
  48.         {
  49.             abr->ag=ag;
  50.             abr->ad=ad;
  51.         }
  52.         else
  53.             printf("Impossible régle génerale\n");
  54.     }
  55.     else
  56.         printf("Void\n");
  57. }
  58. void ajout(arbre **abr,int el)
  59. {
  60.     arbre *a;
  61.     if(!(*abr))
  62.     {
  63.         a=malloc(sizeof(arbre));
  64.         a->ag=a->ad=NULL;
  65.         a->value=el;
  66.         *abr=a;
  67.     }
  68.     else
  69.     {  
  70.         a=*abr;
  71.         while(1){
  72.             if (el==a->value)
  73.             {
  74.                 printf("Impossible\n");
  75.                 break;
  76.             }
  77.             else if (el<a->value)
  78.             {
  79.                 if(!(a->ag))//insere dans le premier neud possible.
  80.                 {
  81.                     arbre *temp=malloc(sizeof(arbre));
  82.                     temp->ag=temp->ad=NULL;
  83.                     temp->value=el;
  84.                     a->ag=temp;
  85.                     break;
  86.                 }
  87.                 else{
  88.                     a=a->ag;
  89.                 }
  90.             }
  91.             else if (el>a->value)
  92.             {
  93.                 if(!(a->ad))//insere dans le premier neud possible.
  94.                 {
  95.                     arbre *temp=malloc(sizeof(arbre));
  96.                     temp->ag=temp->ad=NULL;
  97.                     temp->value=el;
  98.                     a->ad=temp;
  99.                     break;
  100.                 }
  101.                 else{
  102.                     a=a->ad;
  103.                 }
  104.             }
  105.         }
  106.     }
  107. }
  108. void affiche(arbre *abr)
  109. {
  110.     if(abr){
  111.         affiche(abr->ag);
  112.         affiche(abr->ad);
  113.         printf("%d\n",abr->value);
  114.     }
  115. }
  116. int nbrElement(arbre *abr)
  117. {
  118.     if(!abr)
  119.     {
  120.         return 0;
  121.     }
  122.     int p1,p2;
  123.     p1=nbrElement(abr->ag);
  124.     p2=nbrElement(abr->ad);
  125.     return 1 + p1 + p2;
  126. }
  127. int profondeur(arbre *abr)
  128. {
  129.     if(!abr)
  130.     {
  131.         return 0;
  132.     }
  133.     int p1,p2;
  134.     p1=profondeur(abr->ag);
  135.     p2=profondeur(abr->ad);
  136.     if (p1>p2)
  137.     {
  138.         return 1 + p1;
  139.     }
  140.     else
  141.     {
  142.         return 1 + p2;
  143.     }
  144. }
  145. int main(int argc, char const *argv[])
  146. {
  147.     arbre *abr;
  148.     construct(&abr,1);
  149.     printf("%p\n%d\n%p\n%p\n",abr,abr->value,abr->ag,abr->ag);
  150.     ajout(&abr,7);
  151.     ajout(&abr,6);
  152.     ajout(&abr,8);
  153.     ajout(&abr,-15);
  154.     affiche(abr);
  155.     printf("%d\n%d\n%d\n%d\n",infAbr(abr),supAbr(abr),nbrElement(abr),profondeur(abr));
  156.     return 0;
  157. }
Advertisement
Add Comment
Please, Sign In to add comment