A la hora de mostrar el arbol resultante se transforma en un bucle infinito, me empieza a mostrar direcciones de memoria
Código
void eliminar (Arbol * ppio, int x) { // Busca el elemento que se desea eliminar if (esVacio(*ppio)) return; else if (x < (*ppio)->dato) // Si el valor es menor se recorre por la izquierda eliminar(&(*ppio)->hizq,x); else if (x > (*ppio)->dato) // Si el valor es mayor se recorre por la derecha eliminar(&(*ppio)->hder,x); else // Si ya encontraste el valor eliminar_elemento (ppio); } void eliminar_elemento (Arbol * a) { // Elimina el elemento que se desea if (esHoja(*a)) // Si es una hoja else if (esPadreCompleto(*a)) { // Si es padre con dos hijos Arbol * min = minimo(&(*a)->hder); (*a)->dato = (*min)->dato; } else // Si tiene solo un hijo a = reemplazar(a); } Arbol * minimo (Arbol * a) { // Busca el menor elemento if (esVacio(*a)) return NULL; // Retornas nulo si el arbol esta vacio if (!esVacio((*a)->hizq)) // Si tiene hijo izquierdo return minimo(&(*a)->hizq); // Buscamos la parte mas izq posible else // Si no tiene hijo izq return a; // Retornamos el mismo nodo } Arbol * reemplazar (Arbol * a) { // Reemplaza los valores padre con hijo Arbol aux; if (!esVacio((*a)->hizq)) { aux = *a; *a = (*a)->hizq; } else { aux = *a; (*a) = (*a)->hder; } return a; }