Questo è il codice completo:
codice:#include <stdio.h> #include <stdlib.h> typedef int element; typedef struct tree_element{ element value; struct tree_element *left, *right; }node; typedef node *tree; typedef int boolean; boolean emptyt(tree t){ return (t == NULL); } tree emptytree(){ return NULL; } element root(tree t){ if (emptyt(t)) abort(); else return t->value; } tree left(tree t){ if (emptyt(t)) return NULL; else return t->left; } tree right(tree t){ if (emptyt(t)) return NULL; else return t->right; } tree consTree(element e, tree l, tree r){ tree t; t = (node *)malloc(sizeof(node)); t->value = e; t->left = l; t->right = r; return t; } tree insertBinOrd(element e, tree t){ tree l = t; if (emptyt(t)) return consTree(e, emptytree(), emptytree()); while (!emptyt(t)) { if (e <= root(t)){ if (emptyt(left(t))){ t->left = consTree(e, emptytree(), emptytree()); t = left(t); } t = left(t); } else { if (emptyt(right(t))){ t->right = consTree(e, emptytree(), emptytree()); t = right(t); } t = right(t); } } return l; } int uguali(tree t1, tree t2) { tree l = t1, s = t2; /* caso base: entrambi gli alberi vuoti */ if ((emptyt(l)) && (emptyt(s))) { printf("\n\nEntrambi vuoti\n"); return 0; } /* caso base: un albero vuoto, un albero no */ if ((emptyt(l)) || (emptyt(s))) { printf("\n Uno dei due alberi e' vuoto"); return 0; } /* i due nodi in esame devono contenere lo stesso valore e i due sottoalberi sx e dx devono essere uguali (ricorsivamente) */ return (l->value == s->value && uguali(l->left, s->left) && uguali(l->right, s->right)); } int main(){ tree t = emptytree(), r = emptytree(); element el; FILE *f; int ugualiInt = 0; f = fopen("valori.txt", "rt"); if (f == NULL) { printf("Errore Apertura file"); exit(1); } while (fscanf(f, "%d", &el)>0) { t = insertBinOrd(el, t); //Creo i due alberi esattamente identici(ho controllato li riempisse correttamente) r = insertBinOrd(el, r); } ugualiInt = uguali(t, r); printf("\n\n\tSe esce 1 va bene: %d", ugualiInt); getchar(); }

Rispondi quotando