Documente Academic
Documente Profesional
Documente Cultură
El recorrido de rboles refiere al proceso de visitar de una manera sistemtica, exactamente una vez,
cada nodo en una estructura de datos de rbol (examinando y/o actualizando los datos en los
nodos).
Preorden: (raz, izquierdo, derecho). Para recorrer un rbol binario no vaco en preorden, hay que
realizar las siguientes operaciones recursivamente en cada nodo, comenzando con el nodo de raz:
1.
Visite la raz
1.
2. Visite la raz
3. Atraviese el sub-rbol derecho
Postorden: (izquierdo, derecho, raz). Para recorrer un rbol binario no vaco en postorden, hay
que realizar las siguientes operaciones recursivamente en cada nodo:
1.
En general, la diferencia entre preorden, inorden y postorden es cundo se recorre la raz. En los
tres, se recorre primero el sub-rbol izquierdo y luego el derecho.
En preorden, la raz se recorre antes que los recorridos de los subrboles izquierdo y
derecho
En inorden, la raz se recorre entre los recorridos de los rboles izquierdo y derecho, y
Inorden
Postorden
Preorden
Vamos a programarlo
Todo lo dicho anteriormente, vamos a programarlo ahora usando POO
con java (para que sea ms fcil de entender).
Comenzamos con la abstraccin de la informacin, tenemos que un
rbol binario est compuesto por la raz y sus nodos hijos, de la misma
forma que la misma raz no es ms que otro nodo, partiendo de esto
entonces crearemos 2 clases:
(Quiero comentar antes de esto que, aunque no soy muy partidario de
escribir los nombres de los mtodos y clases en espaol, por cuestiones
de entendimiento para muchas personas que lleguen a esta informacin,
los pondr de esa forma).
Arbol
Nodo
/* Declaraciones de variables */
5
6
9
1
0
/* Constructor */
public Nodo(int valor) {
1
1
this.valor = valor;
1
2
1
3
/* Setters y Getters */
1
4
1
5
1
6
1
7
1
8
1
9
2
0
2
1
2
2
2
3
2
4
2
5
2
6
2
7
2
8
2
9
3
0
3
1
3
2
3
3
3 }
4
3
5
3
6
3
7
this.padre = padre;
}
3
8
3
9
4
0
4
1
4
2
4
3
4
4
4
5
4
6
4
7
4
8
valor
hojaIzquierda
hojaDerecha
Hay que tener cuidado con setValor( int valor ) Porque? pues bien, no
podemos actualizar el valor al aire ya que perderamos el orden, por lo
que tenemos un contructor:
/* Constructor */
this.valor = valor;
a partir del cual se ingresa el valor del nodo al crear una instancia del
mismo:
/* Atributos */
5
6
7
8
9
1
0
/* Contructories */
public Arbol( int valor ) {
1
1
1
2
1
3
1
4
this.raiz = raiz;
}
1
5
/* Setters y Getters */
1
6
1
7
return raiz;
}
1
8
1
9
2
0
2
1
this.raiz = raiz;
2
2
2
3
2
4
addNodo
removeNodo
recorridoPreorden
recorridoInorden
recorridoPostorden
if ( raiz == null ) {
/*
*/
1
0
1
1
1
2
this.setRaiz(nodo);
}
else {
/* 4.- En caso negativo preguntamos: X < Nodo */
if ( nodo.getValor() <= raiz.getValor() ) {
1
3
/*
* 5.- En caso de ser menor pasamos al Nodo de la IZQUIERDA del
1
4
1
5
*/
1
6
if (raiz.getHojaIzquierda() == null) {
raiz.setHojaIzquierda(nodo);
1
7
1
8
else {
1
9
2
0
2
}
else {
/*
2
2
2
3
2
4
if (raiz.getHojaDerecha() == null) {
2
5
raiz.setHojaDerecha(nodo);
}
2
6
else {
addNodo( nodo, raiz.getHojaDerecha() );
2
7
2
8
2
9
3
0
3
1
3
2
3
3
3
4
3
5
3
6
3
7
3
8
3
9
4
0
}
}
}
4
1
4
2
4
3
4
4
4
5
rbol binario completo: Es un rbol binario con hojas como mximo en los
niveles
n-1
y
n
(Siendo
n
el
nivel
del
rbol)
Los dos rboles graficados son completos porque son rboles de nivel 3 y hay
nodos hoja en el nivel 3 en el primer caso, y hay nodos hoja en los niveles 3 y 2 en
el
segundo
caso.
Ej. rbol binario no completo:
Hay nodos hoja en los niveles 4, 3 y 2. No debera haber nodos hojas en el nivel 2.
rbol binario ordenado: Si para cada nodo del rbol, los nodos ubicados a la
izquierda son inferiores al que consideramos raz para ese momento y los nodos
ubicados a la derecha son mayores que la raz.
Ej.
Analicemos
si
se
trata
de
un
rbol
binario
ordenado:
Para
el
nodo
que
tiene
el
50:
Los nodos del subrbol izquierdo son todos menores a 50? 8, 25, 30 Si
Los nodos del subrbol derecho son todos mayores a 50? 70 Si.
Para
el
nodo
que
tiene
el
25:
Los nodos del subrbol izquierdo son todos menores a 25? 8 Si
Los nodos del subrbol derecho son todos mayores a 25? 30 Si.
No hace falta analizar los nodos hoja. Si todas las respuestas son afirmativas
podemos luego decir que se trata de un rbol binario ordenado.