¡Buenas!
Si por iguales te refieres a que tienen la misma estructura y los mismos datos en los mismos nodos solo te falta comprobar, como ya te han dicho, si las comparaciones en las distintas ramas te devuelven 0 o 1, y si alguna devuelve 1 ya no tienes que seguir comparando, solo tienes que devolver este valor.
En cambio, si por iguales entendemos que aunque la estructura es distinta tienen los mismos datos, tu código no es correcto. Imagina el nodo raíz con valores distintos, de dos árboles con los mismos datos pero con distinta estructura. Cuando llegues a
if (a->dato == b->dato){ /* <== No hay valor de retorno en esta rama de ejecucion */
iguales(a->izq, b->izq);
iguales(a->der, b->der);
} else {
return 1;
}
a->dato != b->dato, ya que aunque los valores almacenados son los mismos, los valores de los nodos raíz son distintos. Por lo tanto la función devolverá 1 a pesar de que debería devolver 0.
Tampoco puedes asegurar que los nodos hoja sean los mismos, ya que has podido introducir los datos en distinto orden y por lo tanto ocuparán posiciones distintas dentro del árbol.
Lo que tienes que hacer es un
recorrido inorden de cada uno de los dos árboles e ir comparando los valores de los nodos.
¡Saludos!