A parte il fatto che non hai tenuto conto di tutte le correzioni che ti sono state segnalate
in un qualsiasi algoritmo ricorsivo devi stabilire un caso base; nel caso in questione, visto che tu ricorri lungo l'albero fino a quando i puntatori non sono NULL, il caso base potrebbe proprio essere "se sia T1 che T2 sono NULL, allora restituisci 1", cioè "gli alberi sono uguali".codice:int confronta (tree T1, tree T2) { if ((T1==NULL && T2!=NULL) || (T2==NULL && T1!=NULL) || (T1->dato!=T2->dato)) return 0; else return confronta(T1->right, T2->right) + return confronta (T1->left, T2->left); return 1; }
Io lo farei così:
concodice:int same_tree(Node *first, Node *second) { /* caso base */ if (first == NULL && second == NULL) { return 1; } if ((first == NULL && second != NULL) || (first != NULL && second == NULL) || (first -> data != second -> data) { return 0; } /* se si arriva qui, entrambi i puntatori sono != NULL e i dati sono uguali */ return same_tree(first -> l_child, second -> l_child) && same_tree(first -> r_child, second -> r_child); /* il valore da restituire è quindi la AND logica tra i valori della funzione sui sottoalberi di sinistra e di destra */ }
Non ho avuto modo di testarla molto, ma dovrebbe funzionare.codice:typedef struct node { int data; struct node * l_child; struct node * r_child; } Node;

Rispondi quotando