Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Semana 12
Arboles
PRIMERA UNIDAD 3
Competencias
Listas enlazadas
Mapa Conceptual
Lineales
Operaciones
Pilas
ESTRUCTURAS DINAMICAS
LINE
Colas
Arboles
No lineales
1
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
Grafos
INTRODUCCION
1.1 Definiciones
2
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
Vista de un árbol
3
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
1.3 Terminología
4
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
La altura del árbol h, cada nodo de nivel k < h-1 tiene exactamente k hijos.
El árbol está equilibrado perfectamente, si cada nodo de nivel l<h tiene exactamente k
hijos.
B C D
E F G H
I J K
profundidad(A)=0
profundidad(H)=2
altura=3
camino(A,K)={A,B,F,K}
camino(C,K)={}
5
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
2. ÁRBOLES BINARIOS
Es un árbol que solo puede tener dos como máximo de hijos, es decir dos
subconjuntos distintos:
6
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
I1 D1
D2
I2
I3
7
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
8
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
4. ÁRBOL DE EXPRESIÓN
*
d
a * (b + c) + d
*
a
Expresión infija de un árbol de
b c
expresiones
9
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
* -
x a b
-
y z
Árbol de expresión ( x * (y - z) ) + (a - b)
10
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
* /
a b c d
a) ((a * b) + (c / d))
11
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
+ d
+ c
a b
b) (((a + b) + c)+ d)
+ *
- + + *
a x y b c d
5. RECORRIDO DE UN ÁRBOL.
Para visualizar o consultar los datos almacenados en un
árbol se necesita recorrer el árbol o visitar los nodos del
mismo. Al contrario que las listas enlazadas, los árboles
binarios no tienen realmente un primer valor, un segundo
valor, un tercer valor, etc. Se puede afirmar que el nodo raíz
viene el primero, pero ¿Quién viene a continuación? Existen
diferentes métodos de recorrido de árbol ya que la mayoría
de las aplicaciones con árboles son bastante sensibles al
orden en el que se visitan los nodos, de forma que será
preciso elegir cuidadosamente el tipo de recorrido.
12
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
Recorrido Preorden
El recorrido preorden (RID) conlleva los siguientes pasos, en
los que el nodo raíz va antes que los subárboles.
1) Visitar el Nodo Raíz ( R )
2) Recorrer el subárbol izquierdo ( I ) en Preorden.
3) Recorrer el subárbol derecho ( D) en Preorden.
13
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
1
B C
2 5
D E F G
3 4 6 7
Recorrido en Orden
El recorrido en Orden, procesa primero el subárbol izquierdo,
después la raíz y a continuación, el subárbol derecho. El
significado de in es que la raíz se procesa entre los subárboles.
Si el árbol no está vacío, el método implica los siguientes
pasos:
1) Recorrer el subárbol izquierdo ( I ) en Orden.
2) Visitar el Nodo Raíz ( R )
3) Recorrer el subárbol derecho ( D) en Orden.
4
B C
2 6
D E F G
1 3 5 7
Recorrido en Orden D,B,E,A,F,C,G
14
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
7
B C
3 6
D E F G
1 2 4 5
a)
* /
a b c a
b)
+ d
+ c
15
a b
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
c)
+ *
- + + *
a x y b c d
Se trata de árboles de orden 2 en los que se cumple que para cada nodo,
de la clave del nodo y que el valor de la clave raíz del subárbol derecho
16
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
Buscar un elemento.
Insertar un elemento.
Borrar un elemento.
o Izquierda.
o Derecha.
o Raiz.
Información:
Buscar un elemento
17
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
Insertar un elemento
Necesitamos un referencia auxiliar para conservar una referencia al padre del nodo
raíz actual. El valor inicial para ese referencia es NULL.
Padre = NULL
nodo = Raiz
Si Padre es NULL, el árbol estaba vacío, por lo tanto, el nuevo árbol sólo
contendrá el nuevo elemento, que será la raíz del árbol.
Borrar el elemento
18
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
Necesitamos un referencia auxiliar para conservar una referencia al padre del nodo raíz
actual. El valor inicial para ese referencia es NULL.
Padre = NULL
(1) Si el valor del nodo raíz es igual que el del elemento que buscamos,
estamos ante uno de los siguientes casos:
19
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
3. Borramos el 'nodo'.
20
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
5. Borramos el 'nodo'.
21
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
9. Borramos el 'nodo'.
7. IMPLEMENTACIÓN
22
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
23
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
La visita en este caso es la impresión de la información del nodo y los recorridos son las
llamadas recursivas pasando las direcciones de los subárboles izquierdo y derecho.
Los algoritmos de los recorridos en entreorden y postorden son similares. La diferencia es
que la visita la realizamos entre las llamadas recursivas en el recorrido en entre orden:
private void imprimirEntre (Nodo reco)
{
if (reco != null)
{
imprimirEntre (reco.izq);
System.out.print(reco.info + " ");
imprimirEntre (reco.der);
}
}
y por último en el recorrido en postorden la visita la realizamos luego de las dos llamadas
recursivas:
private void imprimirPost (Nodo reco)
{
if (reco != null)
{
imprimirPost (reco.izq);
imprimirPost (reco.der);
System.out.print(reco.info + " ");
}
}
Metodo principal
abo.insertar (100);
abo.insertar (50);
24
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
abo.insertar (25);
abo.insertar (75);
abo.insertar (150);
abo.imprimirPre ();
abo.imprimirEntre ();
abo.imprimirPost ();
8. Ejercicio
Confeccionar una clase que permita insertar un entero en un árbol binario ordenado
verificando que no se encuentre previamente dicho número.
Resultado
25
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
Nodo reco=raiz;
while (reco!=null) {
if (info==reco.info)
return true;
else
if (info>reco.info)
reco=reco.der;
else
reco=reco.izq;
return false;
if (reco!=null) {
cant++;
cantidad(reco.izq);
26
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
cantidad(reco.der);
cant=0;
cantidad(raiz);
return cant;
Para imprimir todos los nodos en entre orden junto al nivel donde se encuentra
planteamos un método recursivo que llegue la referencia del nodo a imprimir junto al nivel
de dicho nodo. Desde el método no recursivo pasamos la referencia a raiz y un uno (ya
que raiz se encuentra en el primer nivel)
Cada vez que descendemos un nivel le pasamos la referencia del subárbol respectivo
junto al nivel que se encuentra dicho nodo:
if (reco != null) {
imprimirEntreConNivel (reco.izq,nivel+1);
imprimirEntreConNivel (reco.der,nivel+1);
27
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
imprimirEntreConNivel (raiz,1);
System.out.println();
if (reco != null) {
retornarAltura (reco.izq,nivel+1);
if (nivel>altura)
altura=nivel;
retornarAltura (reco.der,nivel+1);
altura=0;
retornarAltura (raiz,1);
return altura;
Para imprimir el mayor valor del árbol debemos recorrer siempre por derecha hasta
encontrar un nodo que almacene null en der:
28
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
if (raiz!=null) {
Nodo reco=raiz;
while (reco.der!=null)
reco=reco.der;
Para borrar el menor valor del árbol lo primero que comprobamos es si el subárbol
izquierdo es nulo luego el menor del árbol es el nodo apuntado por raiz. Luego si el
subárbol izquierdo no está vacío procedemos a descender siempre por la izquierda
llevando un referencia en el nodo anterior. Cuando llegamos al nodo que debemos borrar
procedemos a enlazar el referencia izq del nodo que se encuentra en el nivel anterior con
la referencia del subárbol derecho del nodo a borrar:
if (raiz!=null) {
if (raiz.izq==null)
raiz=raiz.der;
else {
Nodo atras=raiz;
Nodo reco=raiz.izq;
while (reco.izq!=null) {
atras=reco;
29
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
reco=reco.izq;
atras.izq=reco.der;
Demostración
abo.insertar (100);
abo.insertar (50);
abo.insertar (25);
abo.insertar (75);
abo.insertar (150);
abo.imprimirEntre ();
abo.imprimirEntreConNivel();
30
Universidad Nacional de San Cristóbal de Huamanga IS241-Estructura de datos
System.out.println(abo.retornarAltura());
abo.mayorValorl();
abo.borrarMenor();
abo.imprimirEntre ();
31