Advertisement
Dany1858

Esercizio Alberi binari v2 (+menu')

Jan 9th, 2015
519
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 1.89 KB | None | 0 0
  1. /*Memorizzare i dati immessi in un albero binario in modo che l etichetta di un
  2. qualsiasi nodo sia maggiore di tutti i valorei del suo sottoalbero sinistro, e
  3. minore di tutti quelli del suo sottoalbero destro*/
  4.  
  5. #include <stdio.h>
  6. #include <malloc.h>
  7.  
  8. struct nodo{
  9.        int inf;
  10.        struct nodo *left;
  11.        struct nodo *right;
  12. };
  13.  
  14. struct nodo *creaAlb(void);
  15. struct nodo *creaNodo(struct nodo *, int);
  16. void anticipato(struct nodo *, int);
  17. void ciclo(int);
  18.  
  19. main()
  20. {
  21.   struct nodo *radice;
  22.  
  23.   radice=creaAlb();
  24.  
  25.   printf("\nVISITA IN ORDINE ANTICIPATO a SOMMARIO\n\n");
  26.   anticipato(radice, 0);
  27.  
  28.   printf("\n\nINVIO per uscire..");
  29.   getchar(); getchar(); return 0;
  30. }
  31.  
  32. struct nodo *creaAlb(void)
  33. {
  34.        struct nodo *p=NULL;
  35.        int x=-1;
  36.        
  37.        while(x!=0){
  38.           printf("\nInserire elemento, 0 per uscire\t");
  39.           scanf("%d", &x);
  40.           if(x!=0) p=creaNodo(p, x);}
  41.        return p;
  42. }
  43.  
  44. struct nodo *creaNodo(struct nodo *p, int val)
  45. {
  46.        if(p==NULL){
  47.           p=(struct nodo*)malloc(sizeof(struct nodo));
  48.           p->inf=val;
  49.           p->left=NULL;
  50.           p->right=NULL;
  51.        }
  52.        else{
  53.           if(val>p->inf) p->right=creaNodo(p->right, val);
  54.           else if(val<p->inf) p->left=creaNodo(p->left, val);
  55.              else{
  56.                  printf("\nElemento gia' presente!\n");
  57.                  getchar();}
  58.        }
  59.        return p;
  60. }
  61.  
  62. void anticipato(struct nodo *p, int n)
  63. {
  64.      if(p!=NULL){
  65.          ciclo(n); n++;
  66.          printf("* %d", p->inf);
  67.          printf("\n");
  68.          if(p->left!=NULL) anticipato(p->left, n);
  69.          else{ ciclo(n); printf("*");}
  70.          printf("\n");
  71.          if(p->right!=NULL) anticipato(p->right, n);
  72.          else{ ciclo(n); printf("*");}}
  73.      else printf("\nAlbero vuoto!!");
  74. }
  75.  
  76. void ciclo(int n)
  77. {
  78.      int i;
  79.      for(i=0; i<n; i++) printf("  ");
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement