Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Memorizzare i dati immessi in un albero binario in modo che l etichetta di un
- qualsiasi nodo sia maggiore di tutti i valorei del suo sottoalbero sinistro, e
- minore di tutti quelli del suo sottoalbero destro*/
- #include <stdio.h>
- #include <malloc.h>
- struct nodo{
- int inf;
- struct nodo *left;
- struct nodo *right;
- };
- int menuAlb(void);
- struct nodo *albBin(struct nodo *);
- struct nodo *creaNodo(struct nodo *, int);
- void anticipato(struct nodo *, int);
- void ciclo(int);
- void ricerca(struct nodo *);
- void ricBin(struct nodo *, int, struct nodo **);
- main()
- {
- int menu=-1;
- struct nodo *radice=NULL;
- while(menu!=0){
- if(menu==-1) menu=1;
- else menu=menuAlb();
- switch(menu){
- case 1:{ system("cls"); radice=albBin(radice); break;}
- case 2:{ ricerca(radice); break;}
- case 4:{ system("cls"); printf("\nVISITA IN ORDINE ANTICIPATO a SOMMARIO\n\n");
- anticipato(radice, 0); printf("\n\nIn attesa..\t"); getchar(); break;}
- case 0:{ return 0;}
- default:{ printf("\nValore non ammesso"); getchar(); break;}
- }}
- }
- int menuAlb()
- {
- int menu;
- system("cls");
- printf("\n------------- MENU'------------\n");
- printf("\n1. Immettere valore\n\n2. Ricerca elemento\n\n4. Stampa albero\n\n0. Exit\n\n ");
- scanf("%d", &menu);
- getchar();
- return menu;
- }
- struct nodo *albBin(struct nodo *p)
- {
- int x=-1;
- while(x!=0){
- printf("\nInserire elemento, 0 per uscire\t");
- scanf("%d", &x);
- if(x!=0) p=creaNodo(p, x);}
- return p;
- }
- struct nodo *creaNodo(struct nodo *p, int val)
- {
- if(p==NULL){
- p=(struct nodo*)malloc(sizeof(struct nodo));
- p->inf=val;
- p->left=NULL;
- p->right=NULL;
- }
- else{
- if(val>p->inf) p->right=creaNodo(p->right, val);
- else if(val<p->inf) p->left=creaNodo(p->left, val);
- else{
- printf("\nElemento gia' presente!\n");
- getchar();}
- }
- return p;
- }
- void ricerca(struct nodo *p)
- {
- int val;
- struct nodo *pEle=NULL;
- system("cls");
- printf("\nInserisci elemento da cercare\t");
- scanf("%d", &val); printf("\n");
- ricBin(p, val, &pEle);
- if(pEle==NULL) printf("\tElemento non presente!");
- printf("\n\nIn attesa..\t"); getchar(); getchar();
- }
- void ricBin(struct nodo *p, int val, struct nodo **pEle)
- {
- if(p!=NULL)
- if(val==p->inf){ printf(" trovato!"); *pEle=p;}
- else
- if(val<p->inf){ printf(" sinistra"); ricBin(p->left, val, pEle);}
- else{ printf(" destra"); ricBin(p->right, val, pEle);}
- }
- void anticipato(struct nodo *p, int n)
- {
- if(p!=NULL){
- ciclo(n); n++;
- printf("* %d", p->inf);
- printf("\n");
- if(p->left!=NULL) anticipato(p->left, n);
- else{ ciclo(n); printf("*");}
- printf("\n");
- if(p->right!=NULL) anticipato(p->right, n);
- else{ ciclo(n); printf("*");}}
- else printf("\nAlbero vuoto!!");
- }
- void ciclo(int n)
- {
- int i;
- for(i=0; i<n; i++) printf(" ");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement