Tutorial Crear Arboles en c++

20
1 Tutorial crear arboles Creamos una clase llamada nodo

description

tutorial crear arboles en c++ en eclipse

Transcript of Tutorial Crear Arboles en c++

Page 1: Tutorial Crear Arboles en c++

1

Tutorial crear arboles

Creamos una clase llamada nodo

Page 2: Tutorial Crear Arboles en c++

2

Creamos un puntero al siguiente nodo que va a manejar la parte de los hijos de manera que se haga la implementación de lista

c

Colocamos un string que va a representar la descripción y la librería string

Como string esta en eel name space lo vamos a utilizar

Utilizamos un método agregar hijo este método es void no retorna nada y recibe como y recibe como parámetro un puntero al nodo que se quiere

agregar como hijo

Page 3: Tutorial Crear Arboles en c++

3

Otro método que vamos a usar es el método que retorna el listado de hijosget hijos retornna al 1°nodo de la lista de hijos que tenga en

particular

agregamos un atributo entero el cual contendrá la cantidad de hijos que tenga en particular

Procedamos a aregar los getters y setters

Page 4: Tutorial Crear Arboles en c++

4

Hacemos clic derecho vamos a source

Ok

Procedemos a implementar en el archivo de implementación los métodos que hemos definido aquí como por ejemplo agregar hijos y get hijos de igual suerte podemos colocar que el constructor de la clase nodo reciba como parámetro un string con el nombre de modo que al instanciar lo pasemos por parámetro al constructor el nombre que tendrá ese nodo y asi nos ahorrramos un paso de manera contraria tocaria instanciar la clase nodo y posteriormente mediante el método set nombre asignaaar un nombre a este nodo, una ves hecho esto podemos implementar estos

Page 5: Tutorial Crear Arboles en c++

5

métodos haciendo clic derecho clic en source implements method

Supongamos que queremos implementar estosd tres metodos

ok

Y aparecen agregsdos estos tres metodos

Page 6: Tutorial Crear Arboles en c++

6

como el constructor que aparece en la parte superior no recibe parámetros

lo eliminamos

Entonces empezamos a implementarlo

Decimo que el atributo nombre es igual al parámetro nombre en el constructor vamos a aprovechar para inciaalizaar este atributo que se llama siguiente con el valor nulo para que no tome valores basura

Page 7: Tutorial Crear Arboles en c++

7

En get hijos vamos a retornar el listado de hijos para esto vamos a agregar

En la cabecera un atributo de tipo puntero a nodo que va a apuntar hacia el primer hijo de este nodo digimos que era una lista de manera que a partir del primero podemos obtener los siguientes

este atributo que acabamos de crear pues evidentemente vamos a inicializarlo en null

Page 8: Tutorial Crear Arboles en c++

8

primer hijo es igual a null para que se sepa que este nodo no tiene hijos

de modo que cuando llame al método get hijos vamos a retornar este primer hijo que pudiera ser nulo o no si retorna nulo este no tiene hijos

este es el método que me va agregar un hijo a mi nodo necesitamos otro puntero, ya tenemos el puntero del primer hijo que se necesita en el momento de recorrer la lista, pero es conveniente tener un puntero al ultimo hijo de modo que al agregar un hijo se agregue atrás o luego del ultimo hijo para esos fines hacemos otro atributo del tipo puntero a nodo

Page 9: Tutorial Crear Arboles en c++

9

al cual llamaremos ultimo hijo

en el constructor diremos que este atributo que se llama ultimo hijo es nullo, antes de agregar un nodo debemos analizar si este no tiene hijos para yo saber si este nodo no tiene hijos para saber si este no tiene hijos es asi si este atributo es nulo pues ya sabemos que no tiene hijos entonces decimos que tanto el atributo primer hijo como el atributo ultimo hijo es igual a este nodo que me acaban de agregar de lo contrario si están agregando un nodo y ya ese nodo tiene hijos entonces a ese nodo que es el ultimo hijo lo vamos a poner como siguiente elemento(setsiguiente(nodo)) esto es una lista enlazada es un atributo privado lo puedo utilizar dentro de la misma claseluego le decimos que el ultimo hijo es ahora este nodo que acabamos de aagregar y hemos terminado con la clase nodo

Page 10: Tutorial Crear Arboles en c++

10

ahora trabajemos con la clase arbolcon

el método recorrer con este podemos ver el contenido de todos los nodos del árbol orecorrer cada uno de ellos

pasamos a la clase árbol este tendrá un atributo del tipo privado y de tipo nodo como vamos a estar utiluizando la clase nodo vamos a incluir la librería de nodo le decimos que tiene un puntero de tipo nodo el cual será la raíz de ese árbol,

Page 11: Tutorial Crear Arboles en c++

11

esta clase va tener un método void que va a ser recorrer el cual recibe como parámetro un puntero a nodo

ahora hacemos a este atributo raíz un getters de modo que las clases puedan accerder al atributo raíz y también podemos hacer un gett sett

Page 12: Tutorial Crear Arboles en c++

12

Y luego colocamos al constructor del árbol podemos pasarlo un puntero a nodo podamos pasarle la raiz

Luego procedemos a implementar el código a estos metodos

Page 13: Tutorial Crear Arboles en c++

13

Queremos recorrer el método recorrer como el constructor

Este constructor que no recibe parametros lo eliminamos

En el constructor de árbol vamos a decir que el atributo raíz es igual al parámetro raíz (this->raíz=raíz)

Antes de recorrer esos nodos vemos que al momento de agregar hijos nos falto incrementar la variable hijos que habíamos definido como un

Page 14: Tutorial Crear Arboles en c++

14

atributo en la clase nodo

Le damos en el constructor de nodo un valor inicial, decir que hijos inicia en 0

El método recorrer lo primero que hace es imprimir utilizando el nombre de ese nodo y hace un salto de línea, luego de esto: si (if) ese nodo tiene hijos es decir si ese atributo es mayor que cero se hace lo siguiente: el primero de los hijos lo vamos a guardar en una variable de tipo que lo llamaremos I nos retorna el puntero al primer hijo (nodo* I=nodo->

Page 15: Tutorial Crear Arboles en c++

15

gethijos();)

Ahora colocamos otro método accesor para acceder a ese atributo entero que me dice cuantos hijos tiene este listado este metodose va a llamar int getnumerohijo

Decimos que lo queremos implementar clic derecho-source-implement method

Page 16: Tutorial Crear Arboles en c++

16

Al hacerlo vemos como se agrego getnumerohijos el cual vamos a decir el cual nos va a retornar el valor de atributo hijo (thispara aclarar que es un atributo)

Hacemos la siguiente modificación decimos que si el numero de es mayor que 0 entonces vamos a recorrer este listado de nodos recorrermos esto siempre y cuando(while)pase lo siguiente decíamos gethijos retorna solo un elemento el primero de la lista de hijos esto lo guardamos en la variable I que es un puntero a nodo y tendremos un ¡ que se va a repetir

Page 17: Tutorial Crear Arboles en c++

17

siempre y cuando I sea diferente de null de modo que para cada uno de esos hijos vamos llamar recursivamente usando recursividad llamamos a recorrer y pasamos como parámetro a I y decimos que I => getSiguiente de modo que al final de cada vuelta I toma el valor del siguiente elemento de la lista hijos de ese nodo si getSiguiente retorna nulo no se repitara la próxima vuelta ahí terminamos este árbol sencillo utilizando listas enlazadas

Probamos vamos al archivo main

Creamos varios nodos tomamos el arbol siguiente

Page 18: Tutorial Crear Arboles en c++

18

Al nodo A le agregamos los nodos hijos B,C,D

Vemos en la figura que B tiene como hijos E,F los cuales se crean de la misma maner que creamos los anteriores hijo pero esta vez son de B

Ahora creamos nuestro árbol llamamos árbol y al constructor le vamos a pasar como parámetro al nodo Aindicando que A es la raíz del árbol para recorrer este árbol decimos que árbol invocamos el método recorrer y le pasamos como parámetro la raíz de este árbol(getRaiz) como ya esta asignada es lo mismo que le pase a (a) como parametro

Page 19: Tutorial Crear Arboles en c++

19

Incluimos a árbol.h para que el encuentre la clase árbol y a su vez árbol.h contiene a nodo.h

Al ejecutar este código vemos como hemos recorrido nuestro arbol

Los cuales imprimió los nodos con los hijos que le programamos si se quiere se sigue igual y se programa los otros

También se puede crear un árbol binario agregando a la clase árbol que ya creamos un atributo de tipo árbol que se haga referencia del árbol que queda a la derecha y otro atributo de tipo puntero a árbol que va hacer

Page 20: Tutorial Crear Arboles en c++

20

referencia al sub árbol que queda a la izquierda