elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación C/C++ (Moderadores: Eternal Idol, Littlehorse, K-YreX)
| | |-+  Arbol recursivo
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Arbol recursivo  (Leído 2,261 veces)
Snarky

Desconectado Desconectado

Mensajes: 8


Ver Perfil
Arbol recursivo
« en: 17 Mayo 2018, 13:57 pm »

Alguien me puede explicar este trozo de código recursivo?:

void mostrarArbol(Nodo * arbol, contador){

if(arbol == NULL){

return;

}

else{

mostrarArbol(arbol->der, contador+1);
for( int i = 0; i<contador, i++){

cout << "   ";
}
cout << arbol->dato << endl;
mostrarArbol(arbol->izq, contador + 1);
}
}


En línea

MAFUS


Desconectado Desconectado

Mensajes: 1.603



Ver Perfil
Re: Arbol recursivo
« Respuesta #1 en: 17 Mayo 2018, 16:01 pm »

Mira, es muy fácil:

El dato tiene una estructura clásica de árbol binario
Código:
typedef struct _nodo {
    int dato;
    struct _nodo *izq;
    struct _nodo *der;
} Nodo;

Y a partir de aquí se lee la función
Código:
void mostrarArbol(Nodo * arbol, unsigned contador){
No estaba puesto, pero considero unsgined a contador pues lo normal es que la raíz sea 0 y vaya ascendiendo a cada nivel, por tanto los números negativos no son aptos para este menester.
mostrarArbol recibe el puntero a un tipo Nodo para no andar todos los datos de cada estructura, contador indicará la profundidad del nivel a que se encuentra (esto lo saco de más adelante como veremos).

Código:
    if(arbol == NULL){
        return;
    }
Este es la condición de fin de recursividad. Ésta se detendrá al llegar a un nodo vacío, es decir, cuándo se esté fuera del árbol.

Código:
    else{
        mostrarArbol(arbol->der, contador+1);
Pero si la nodo forma parte del árbol se seguirá por su rama derecha. No hay que preocuparse por si está vacía, ya que hemos visto anteriormente que la función se encarga de terminar la búsqueda si eso pasa. Además se le indica a la función que el siguiente nivel será uno mas que éste, con contador+1. No se ha usado contador++ porque se quiere retener, para la actual instancia de la función, del valor que guarda.

Código:
        for(int i=0; i<contador; i++){
            cout << "   ";
        }
        cout << arbol->dato << endl;
Y por esto es por lo que se necesita el dato de contador: a cada nivel se le representa su profundidad con un espacio. Al final de los espacios se coloca el dato que hay en el nodo. Así la representación es más visual.
Código:
        mostrarArbol(arbol->izq, contador + 1);
    }
}
Se procede a realizar con la rama izquierda lo que se hacía con la derecha.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Problema recursivo
Ejercicios
:ohk<any> 4 10,363 Último mensaje 4 Octubre 2008, 15:00 pm
por :ohk<any>
Listado recursivo
Java
zaico 2 4,529 Último mensaje 30 Abril 2012, 00:23 am
por zaico
Suma de vectores recursivo
Programación C/C++
s3tH 4 8,109 Último mensaje 6 Mayo 2012, 20:18 pm
por s3tH
Algoritmo recursivo
Programación General
melisapuntoisa 0 1,975 Último mensaje 14 Diciembre 2013, 12:29 pm
por melisapuntoisa
Laberinto Recursivo
Programación C/C++
Sebastian Leiva 0 3,433 Último mensaje 25 Diciembre 2016, 18:59 pm
por Sebastian Leiva
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines