problemilla recursividad en c#

letman

tengo un problemilla al crear una funcion que borre un arbol binario de forma recursiva..

tengo el codigo para hacerlo de forma iterativa. pero es que de forma recursiva no llego a cojerlo..

se que tiene mucho menos codigo.. de forma recursiva pero es mas complicao y nose alguien me peude decir algun pistilla

el codigo de borrar una rbol binario CREOQ ES ASI!! de forma iterativa aver si podemos scarla de fomra recusriva!!!

spoiler
uplink

1º paso: localizas el nodo que quieres borrar con 2 punteros, uno a el, y uno justamente anterior.

Si el nodo que quieres borrar no tiene hijos, borras, y marcas el puntero anterior a nulo.

Si tiene hijos, pones que el hijo del anterior apunte al hijo del sucesor, y luego borras.

Esa es la pista, piensalo y pica el código, no copies ejemplos hechos, pues este proceso es muy básico y luego te servirá para otros paradigmas de programación, como el funcional.

Saludos!

dagavi

Edit: No había visto tu código, pensaba que te querías cargar el árbol entero. No estoy seguro de si localizas el nodo N con el dato P y le aplicas este borrar si te funcionaría (previa traducción a C#)
Si lo hicieras conseguirías este efecto al intenta borrar el nodo con la X roja:


No se de C#

pero en C++ diría podrías hacer algo tal que:

void borrar(Nodo*& n) {
    if (n != NULL) {
        borrar(n->hijo_izquierdo);
        borrar(n->hijo_derecho);
        delete n; // free en C
        n = NULL;
    }
}
JuAn4k4

Si soy hoja "me borro".

Si soy nodo : (borro a mis hijos ) borrarArbol( hijo1 ) ... borrarArbol( hijoN ) ; me borro yo.

y la llamas con borrarArbol(raiz);

Editado

Tu no tienes nada ITERATIVO (While o For) en tu algoritmo, tu lo que quieres es borrar un dato, no un arbol.

-_- Lo unico recursivo ahi seria el buscar el dato.

Creo que tu no has hecho el codigo que has puesto en #1 ,si fuera tu profesor te ponia un 0 por copiar.

Soltrac

#4 Es evidente, como q el código está en C y él ha pedido C# ^^ XDDDD.

Usuarios habituales

  • Soltrac
  • JuAn4k4
  • dagavi
  • uplink
  • letman