Tú lo que estas insertando en el árbol no son los valores de i, sino el puntero a i, por lo tanto es lógico que nodo_t *nodo y void *aIngresar sean el mismo
asi con el memcpy copio el contenido y no la direccion
Pero no olvides hacer un free() de los malloc() que hayas hecho.
Sigo pensando que con POO quedaría mucho más bonito, puesto que tienes destructores que se encargan de esto.
Código: Cnodo_t *creaNodo(arbol_t *arbol, void *valor, nodo_t *der, nodo_t *iz)
Código: Creturn creaNodo(arbol, aIngresar, NULL, NULL);
Código: Cnodo_t *arbolInsert(arbol_t *arbol, nodo_t *nodo, void *aIngresar){ if(!nodo) return creaNodo(arbol, aIngresar, NULL, NULL); if(arbol->funCmp(nodo->valor, aIngresar) > 0) nodo->iz = arbolInsert(arbol, nodo->iz, aIngresar); else if(arbol->funCmp(nodo->valor, aIngresar) < 0) nodo->der = arbolInsert(arbol, nodo->der, aIngresar); return nodo;}
puede que funciones pero no estoy seguro de si if(!nodo) es lo mismo que prguntar if (nodo == NULL), esto es mucho mas decifrable cuando se labura con punteros jeje
otra, en tu codigo no conteplabas en los casos que arbol->funCmp(nodo->valor, aIngresar) eran iguales a cero, en ese caso nunca harias nada yo lo solucione con un <= 0 eso me garantiza que todos los valores seran insertados;y de vuelta vos llamaste dos veces a arbol->funCmp(nodo->valor, aIngresar) cuando por defecto en un IF, sabes la contrapartida colocando un ELSE
como tu codigo no contempla valores repetidos
si if (!nodo) seria preguntar por si nodo == NULL
cualquier otro valor seria una aberracion sin ningun sentido.