ciao a tutti, ho appena letto un post su un albero binario di interi su questo forum e ho preso il codice e lo ho adattato per lavorare su chiavi stringhe.
il mio problema è il seguente:
-leggo in un ciclo un certo numero di stringhe(nel mio esempio 7)
-se la stringa non è presente la inserisco nell albero
-uscito dal ciclo stampo le stringhe del mio albero
vi posto il codice sperando che mi possiate dare una mano
codice:#include<malloc.h> #include<string.h> #include<stdlib.h> #include<stdio.h> //FUNZIONA struct Nodo{ char * key; struct Nodo* left; struct Nodo* right; }; typedef struct Nodo* Tree; void insert(Tree *t, char * k){ // crea il nodo foglia da inserire contenente la chiave struct Nodo* e = malloc(sizeof(struct Nodo)); e->key = k; e->left = e->right = NULL; struct Nodo* p; struct Nodo* x = *t; // se l'albero è vuoto imposta e come radice dell'albero if (x == NULL) { *t = e; return; } // altrimenti cerca la posizione della foglia nell'albero while (x != NULL){ p = x; if (strcmp(x->key,k) < 0) x = x->right; else x = x->left; } // ora p punta al padre del nuovo elemento da inserire in t // quindi si procede a linkare p ed e if (strcmp(p->key,k) < 0) p->right = e; else p->left = e; } // cerca una chiave k nell'albero t e restituisce la profondità alla quale si trova // oppure 0 se la chiave non è presente in t int search(Tree t, char* k){ struct Nodo* n= t; int depth = 0; while (n != NULL){ depth++; if (strcmp(n->key,k) >0) n = n->left; else if (strcmp(n->key,k) == 0) return depth; else n = n->right; } return 0; } int stampaa(Tree T) { struct Nodo* n = T; if (n == NULL) return -1; //caso ricorsivo (albero non vuoto) else { // esamina radice printf("%s\n", n->key); // visita sottoalbero sinistro stampaa(n->left); // visita sottoalbero destro stampaa(n->right); } return 1; } int main() { int a; int k,i; Tree t= NULL; char *buf1, *buf2; buf1 = malloc(30 * sizeof(char)); printf("inserisci chiave\n"); scanf("%s", buf1); for(i=0;i<5;i++) {insert(&t,buf1); scanf("%s", buf1); } printf("stampa\n"); stampaa(t); }
baci giulia

Rispondi quotando