home *** CD-ROM | disk | FTP | other *** search
/ ftp.disi.unige.it / 2015-02-11.ftp.disi.unige.it.tar / ftp.disi.unige.it / pub / .person / CataniaB / teach-act / testi-esami / labo-9.98 / parte2.c < prev    next >
C/C++ Source or Header  |  1999-03-11  |  1KB  |  83 lines

  1. /* Esame 14 settembre '98 - parte 2 */
  2.  
  3. #include <stdio.h>
  4. #include <stdlib.h>
  5.  
  6. #define MAX 30
  7.  
  8. typedef struct node *tree;
  9.  
  10. struct node
  11. {
  12.   int el;
  13.   tree left,right;
  14. };
  15.  
  16. void insert(int,tree*);
  17.  
  18. void print(tree);
  19.  
  20. void inc(tree);
  21.  
  22. void insert(int i, tree *t)
  23. {
  24.   if (*t==NULL) /* caso base: albero vuoto */
  25.     {
  26.       *t=(tree) malloc(sizeof(struct node));
  27.       (*t)->el=i;
  28.       (*t)->left=NULL;
  29.       (*t)->right=NULL;
  30.     }
  31.   else if (i<=(*t)->el) /* passo induttivo, sottoalbero sinistro */
  32.     insert(i,&((*t)->left));
  33.   else                 /* passo induttivo, sottoalbero destro (i>(*t)->el) */
  34.     insert(i,&((*t)->right));
  35. }   
  36.  
  37.  
  38. void print(tree t)
  39. {
  40.   if (t!=NULL) /* se l'albero e` vuoto non stampa nulla */
  41.     {
  42.       print(t->left);
  43.       printf(" %d",t->el);
  44.       print(t->right);
  45.     }
  46. }
  47.  
  48. void inc(tree t)
  49. {
  50.   if (t!=NULL) /* se l'albero e` vuoto non fa nulla */
  51.     {
  52.       inc(t->left);
  53.       (t->el)++;
  54.       inc(t->right);
  55.     }
  56. }
  57.  
  58. int main(void)
  59. {
  60.   char fname[MAX];
  61.   tree t=NULL;
  62.   FILE *fd=NULL;
  63.   int i;
  64.  
  65.   printf("Enter file name: ");
  66.   scanf("%s",fname);
  67.   if (fd=fopen(fname,"r"))
  68.     {
  69.       while (fscanf(fd,"%d",&i)==1 && i!=-1)
  70.       insert(i,&t);
  71.       printf("Tree from file %s: ",fname);
  72.       print(t);
  73.       printf("\n");
  74.       printf("Tree after inc: ");
  75.       inc(t);
  76.       print(t);
  77.       printf("\n");
  78.       fclose(fd);
  79.     }
  80.   else
  81.     printf("Error opening file %s\n",fname);
  82. }
  83.