ayudemnme a interpretar este corto codigo

Andrea
02 de Octubre del 2004
es el siguiente siguiente pedazo de codigo necesito analizarlo amigos ayudenme:


void borrar(tarbol **a, int elem)
{
void sustituir(tarbol **a, tarbol **aux);
tarbol *aux;
if (*a == NULL) /* no existe la clave */
return;
if ((*a) ->clave < elem) borrar(&(*a)->der, elem);
else if ((*a)->clave >elem) borrar(&(*a)->izq, elem);
else if ((*a)->clave == elem)
{
aux= *a;
if ((*a)->izq == NULL) *a=(*a)->der;
else if ((*a)->der == NULL) *a=(*a)->izq;
else sustituir (&(*a)->izq, &aux); /* se sustituye por la mayor de las menores */

free(aux);
}
}

charly++
02 de Octubre del 2004
nose que compilador usas pero ese codigo tiene errores por lo menos para el TC++ 3.0 que es el que yo usaba, cuando abres la llave el primer renglon deberia ser:
sustituir(tarbol **a, tarbol **aux); //sin el void
de todos modos los argumentos de esa forma no.
el segundo renglon es una definicion de una variable local lo cual esta mal deberia estar primero que todo.

la funcion aparentemente intenta barrar un elemento y balancear de un arblol.
cuando digo elemento me refiero a una estructura..
creo que no fui de mucha ayuda pero es la que veo.
nos vemos.

Miguel Angel
02 de Octubre del 2004
Primeramente... creo que se trata del cuerpo de una función que no devuelve nada y recibe dos parámetros, uno de tipo apuntador a otro apuntador, y un entero. Ahora, en el tercer renglón, hay una llamada a otra función, con algo que seguramente te arrojaría un error de compilación... Después se declara un nuevo puntero, el cual si regresa un NULL ( o sea, si no hay más memoria). Lo que sigue es que si el dato miembro de "a" clave es menor al segundo parametro recibido se llama a la función misma, lo cual es un error fatal...

Por lo menos en cualquier compilador de C / C++ me reservo mi opinión sobre si pueda correr el programa...