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();
}