Está en la página 1de 60

A

Luis
(bisabuelo)
B
Micaela Lucas María
(hermana) (abuelo) (hermana)

Luis Juana María C


(padre) (hermana)

Victoria Graciela Luis


(hija) (hija) (hijo)
D
UNIDAD VI E

A A h raíz

B C ÁRBOLES
B E F
D E F

G H C D G H I
A

B E F CONTENIDO
C D G H I

• INTRODUCCIÓN
• ÁRBOLES GENERALES
• ÁRBOLES BINARIOS
• ESTRUCTURA DE UN ÁRBOL BINARIO
A
B

C • OPERACIONES EN ÁRBOL BINARIO


D
E
• ÁRBOLES DE EXPRESIÓN
• RECORRIDO DE UN ÁRBOL
• ÁRBOL BINARIO DE BUSQUEDA
A
• OPERACIONES ÁRBOL BINARIO DE
B C BUSQUEDA
D E F
2
G H
A

B E F INTRODUCCIÓN
C D G H I
• El árbol es una estructura de datos muy
importante en informática y en ciencias de la
computación. Los árboles son estructuras no
lineales, al contrario que los arreglos y las listas
A enlazadas.
B
• Son muy utilizados en informática para
representar fórmulas algebraicas como un método
C

eficiente para búsquedas grandes y complejas, y


D
E
en aplicaciones diversas tales como la inteligencia
artificial o algoritmos de cifrado. Casi todos los
sistemas operativos almacenan sus archivos en
A
árboles.
B C • También se utilizan en diseño de compiladores,
D E F
procesadores de texto y algoritmos de búsqueda.
3
G H
A

B E F ÁRBOLES GENERALES
C D G H I

El concepto de árbol implica una


A
estructura en la que los datos se
B organizan de modo que los elementos
de información están relacionados
C

D
E
entre sí a través de ramas.

B C

D E F
4
G H
A

B E F Ejemplo típico
C D G H I

Luis
(bisabuelo)

A Micaela Lucas María


B (hermana) (abuelo) (hermana)
C

D
E
Luis Juana
(padre) (hermana)

Victoria Grecia Luis


A (hija) (hija) (hijo)
B C

D E F Árbol genealógico (bisabuelo-bisnietos)


5
G H
A

B E F Ejemplo típico
C D G H I

Presidente

Director Director Director de Director de Director


gerente de marketing recursos humanos informática financiero
A
B

C
Director de Director de Director de
D
mantenimiento software internet
E

Ingeniero de
Analista Programador
software
A

B C Estructura jerárquica tipo árbol


D E F
6
G H
A

B E F Terminología
C D G H I

• Árbol: Conjunto finito de elementos.


• Raíz : Es el primer nodo insertado.
A
• Nodo: Elemento de un árbol.
B

C
• Rama o arco: línea dirigida que
D
conecta los nodos.
E
• Nodo Padre: Nodo que tiene nodo(s)
sucesores.
• Nodo Hijo: Nodo que tiene un nodo
B
A

C
antecesor.
D E F
7
G H
A

B E F Terminología
C D G H I

• Nodo Hoja: Nodo sin hijos o nodo


terminal.
A • Nivel: Distancia a la raíz.
• Altura o profundidad: Es el nivel de la
B

D
E
hoja del camino más largo desde la
raíz más uno.
• Subárbol: Cualquier estructura
A conectada por debajo de la raíz.
B C

D E F
8
G H
A

B E F Terminología
C D G H I

• Nodos hermanos: Los nodos que


tienen el mismo padre.
A • Camino: Es una secuencia de nodos
B

C
(desde la raíz hasta el nodo deseado).
D
E
• Grado del nodo: Número de ramas
asociadas.

B C

D E F
9
G H
A

B E F Terminología
C D G H I

Nivel 0 A raíz

A
B
Nivel 1 B E F
Rama FI
C

D
E

Nivel 2 C D G H I 10

Camino al nodo I: AFI Hermanos: {B, E, F} , {C, D}, {G, H, I}


A
Padres: A, B, F Hojas: C, D, E, G, H, I
B C
Hijos: B, E, F, C, D, G, H,I Profundidad: 3
D E F Grados de B: 2 Grados de F: 3 10
G H
A

B E F Terminología
C D G H I

Definición recursiva de un árbol


Un árbol es un conjunto de nodos que:
A 1. O bien es vacío, o bien
B

C 2. Tiene un nodo determinado llamado


D
E
raíz, del que jerárquicamente
desciende cero o más subárboles, que
son también árboles.
A

B C

D E F
11
G H
A

B E F Representación de un árbol
C D G H I

• En niveles de profundidad: es
utilizado para representar sistemas
A
jerárquicos en modo texto o número
B en situaciones tales como facturación,
gestión de stocks en almacenamiento,
C

D
E
etc.

B C

D E F
12
G H
A
Ejemplo de árbol en nivel de
B E F
profundidad
C D G H I

A
A B
A
C
B
B E F D
C

D
E
E
F
C D G H I
13
G
H
A

B C I
D E F
13
G H
A

B E F Representación de un árbol
C D G H I

• De lista: se representa mediante


paréntesis.
A A
B

C
B E F
D
E

C D G H I
14

B
A

C
Notación en paréntesis: A(B(C,D),E,F(G,H,I))
D E F
14
G H
A

B E F ÁRBOLES BINARIOS
C D G H I

Un árbol binario es un árbol en el que


ningún nodo puede tener más de dos
A
subárboles. En un árbol binario, cada
B nodo puede tener cero, uno o dos hijos
(subárboles).
C

D
E
A
A A A
A
B
B C B C B
C
D E F
A
D A
G H
A B
E
C B
B C

D E F
15
G H
A

B E F ÁRBOLES BINARIOS
C D G H I

A
Hijo izquierdo Hijo derecho
A
B

D
B C
E

B C

D E F
16
G H
A

B E F ÁRBOLES BINARIOS
C D G H I

• Un árbol binario se divide en tres


subconjunto disjuntos:
A
– {R} Nodo raíz
B
– {I1, I2, …, In} Subárbol izquierdo de R
C

D – {D1, D2, …, Dn} Subárbol derecho de R


E
R

I1 D1

B C I2 I3 D2

D E F Subárbol izquierdo de R Subárbol derecho de R 17


G H
A

B E F Equilibrio
C D G H I

• Equilibrio: Para determinar si un árbol


está equilibrado, se calcula el factor de
A
equilibrio de cada nodo.
B

D
E
• El factor de equilibrio de un nodo en
un árbol binario es la diferencia entre
la altura del subárbol derecho (HD) y
A
la altura del subárbol izquierdo (HI).
B C fe(B) = HD - HI .
D E F
18
G H
A

B E F Equilibrio
C D G H I

A
fe(A)= 4 – 0 = 4
B

C A
A B
fe(A)= 2 – 0 = 2
D
B
C
C E

D
E
A
A fe(A)= 1 – 1 = 0
B C
B C

D E F
A

B C G H fe(A)= 2 – 3 = -1
D E F
19
G H
A

B E F Árboles binarios completos


C D G H I

• Un árbol binario completo de


profundidad n es un árbol en el que para
cada nivel, del 0 al nivel n-1, tiene un
A
B conjunto lleno de nodos y todos los
C
nodos hojas a nivel n-1 ocupan las
posiciones más a la izquierda del árbol.
D
E

C
Árbol completo
B
(profundidad 4)
A
D E F G
B C

D E F H I J K
20
G H
A

B E F Árboles binarios completos


C D G H I

• Un árbol binario completo que contiene


2n nodos a nivel n-1 es un árbol lleno. Es
un árbol binario que tiene el máximo
número de entradas para su altura. Esto
A
B

C sucede cuando el último nivel ésta lleno.


D
E A

C
B

A D E F G
B C

D E F Árbol lleno (profundidad 3)


21
G H
A

B E F ÁRBOLES BINARIOS
C D G H I

• En un Árbol degradado, existe un solo


nodo hoja y cada nodo no hoja sólo
A
tiene un hijo (equivalente a una lista
B enlazada).
C

D A
E
B

D
A
E
B C

D E F
22
G H
A
ESTRUCTURA DE UN ÁRBOL
B E F
BINARIO
C D G H I

• La estructura de un árbol binario se


construye con nodos. Cada nodo debe
contener el campo dato (datos a
A
B
almacenar) y dos campos punteros o
C referencia, uno al subárbol izquierdo y
D otro al subárbol derecho, que se
conocen como rama izquierda
E

(izquierdo, izqdo) y rama derecha


(derecho, dcho) respectivamente. Un
B
A

C
valor null indica un árbol vacío.
D E F
23
G H
A
ESTRUCTURA DE UN ÁRBOL
B E F
BINARIO
C D G H I

izqdo datos dcho

izqdo datos dcho

A
• El algoritmo correspondiente a la
estructura de un árbol es el siguiente:
B

D Nodo
E
subarbolIzquierdo <referencia a Nodo>
datos <TipoDato>
subarbolDerecho < referencia a Nodo >
A

B C
Fin Nodo
D E F
24
G H
A
ESTRUCTURA DE UN ÁRBOL
B E F
BINARIO
C D G H I

B C

D E F

G H Estructura
A
B Árbol izqdo A dcho
C

D
E izqdo B dcho izqdo C dcho

izqdo D dcho izqdo E dcho izqdo F dcho

B C
izqdo G dcho izqdo H dcho

D E F
25
G H
A

B E F Representación en Java
C D G H I

• Los nodos de un árbol se representan


en una clase. Se supone que el nodo
tiene los campo dato, izda (rama
A
B
iaquierda) y dcha (rama derecha). El
C constructor inicializa el dato a un
D elemento y los apuntadores izda y dcha
a null. Otro constructor inicializa todos
E

los elementos del nodo a null. El tipo


de dato se generaliza con la clase base
B
A

C
Object.
D E F
26
G H
A

B E F Clase Nodo
C D G H I
package arbolBinario;
public class Nodo {
Object dato;
Nodo izda, dcha;
public Nodo(Object x){
A
B

C dato = x;
D izqda = dcha = null;
E }
public Nodo(){
dato = null;
izqda = dcha = null;
A

B C
}
D E F //métodos
27
G H }
A

B E F Clase árbol binario


C D G H I

• La naturaleza recursiva de un árbol


binario determina la realización de las
A
operaciones básicas. La clase que
B representa a la estructura árbol tiene
como variable de instancia la raíz del
C

D
E
árbol que es una referencia al nodo;
sus ramas izquierda y derecha son, a
su vez, árboles binarios.
A

B C

D E F
28
G H
A

B E F Clase árbol binario


C D G H I

El método nuevoArbol() crea un árbol


cuya raíz es un nodo con el campo dato
A
el que se pasa como segundo
B argumento, la rama izquierda es el
árbol que se pasa como primer
C

D
E
argumento y la rama derecha es el
árbol que se pasa como tercer
argumento
A

B C

D E F
29
G H
A

B E F Clase Arbol Binario


C D G H I
package arbolBinario;
public class Arbol {
private Nodo raiz;
public Arbol(){
A raiz = null;
B
}
C

D
public Arbol(Object elem){
E raiz = new Nodo(elem);
}
public void nuevoArbol(Arbol ramaI, Object dt, Arbol ramaD){
raiz = new Nodo(dt);
A if(ramaI != null) raiz.izqda = ramaI.raiz;
B C if(ramaD != null) raiz.dcha = ramaD.raiz;
D E
}
F
// operaciones con árboles binarios 30
G H
}
A

B E F Tarea
C D G H I

• Que genera el siguiente código


Arbol ar, a1, a2;
Pila pila = new Pila();
ar = a1 = a2 = new Arbol();
A a1.nuevoArbol(null,”Maria”,null);
B a2.nuevoArbol(null,”Rodrigo”,null);
C ar.nuevoArbol(a1,”Esperanza”,a2);
D
pila.insertar(ar);
E a1.nuevoArbol(null,”Alondra”,null);
a2.nuevoArbol(null,”Abel”,null);
ar.nuevoArbol(a1,”Arturo”,a2);
pila.insertar(ar);
a2 = pila.quitar();
A a1 = pila.quitar();
B C ar.nuevoArbol(a1,” Alicia”,a2);
D E F
31
G H
A
OPERACIONES EN ÁRBOL
B E F
BINARIO
C D G H I

• Con un árbol binario se pueden realizar diversas


operaciones, el hacer uso de una u otra operación
dependerá de la aplicación que se le quiera dar a un
árbol. Las operaciones son las siguientes:
A • Determinar su altura
B
• Determinar su numero de elementos
C
• Hacer
D
E
• Visualizar el árbol binario en pantalla o en impresora
• Determinar si dos árboles binarios son idénticos
• Borrar (eliminar el árbol)
• Si es un árbol de expresión, evaluar la expresión
• Si es un árbol de expresión, obtener la forma de
A paréntesis de la expresión
B C

D E F
32
G H
A
OPERACIONES EN ÁRBOL
B E F
BINARIO
C D G H I

• Todas estas operaciones se pueden


realizar recorriendo el árbol binario
A
de un modo sistemático. El recorrido
B de un árbol es la operación de visita al
árbol, o lo que es lo mismo, la visita a
C

D
E
cada nodo del árbol una vez y sólo
una.

B C

D E F
33
G H
A

B E F ÁRBOLES DE EXPRESIÓN
C D G H I

• Una aplicación muy importante de los


árboles binarios son los árboles de
A
expresión. Una expresión es una
B secuencia de tokens (componentes de
léxicos que siguen unas reglas
C

D
E
prescritas). Un token puede ser un
operando o un operador.
• Un árbol de expresión es un árbol
binario con las siguientes propiedades:
A

B C

D E F
34
G H
A

B E F ÁRBOLES DE EXPRESIÓN
C D G H I

1. Cada hoja es un operando


2. Los nodos raíz e internos son operadores
3. Los subárboles son subexpresiones en los
A que el nodo raíz es un operador
B

C +

D
E d
*
a * (b + c) + d
a +

b c
A

B C

D E F
Una expresión infija y su árbol de expresión
35
G H
A

B E F ÁRBOLES DE EXPRESIÓN
C D G H I

• Obsérvese que los paréntesis no se


almacenan en el árbol, pero están
implicados en la forma del árbol. Si se
A supone que todos los operadores tienen dos
B operandos, se puede representar una
C
expresión por un árbol binario cuya raíz
D
E
contiene un operador y cuyos subárboles
izquierdo y derecho son los operandos
izquierdo y derecho respectivamente. Cada
operando puede ser una letra (x, y, a, b, etc)
A o una subexpresión representada como un
B C subárbol.
D E F
36
G H
A

B E F RECORRIDO DE UN ÁRBOL
C D G H I

• Para visualizar o consultar los datos


almacenados en un árbol se necesita recorrer
el árbol o visitar los nodos del mismo. Al
A
contrario que las listas enlazadas, los árboles
B

C binarios no tienen realmente un primer


D valor, un segundo valor, tercer valor, etc. Se
E
puede afirmar que la raíz es el primero, pero
¿quién viene a continuación? Existen
diferentes métodos de recorrido de árbol, ya
A

B C

D E F
37
G H
A

B E F RECORRIDO DE UN ÁRBOL
C D G H I

que la mayoría de las aplicaciones binarias


son bastante sensibles al orden en el que se
visitan los nodos, de forma que será preciso
A elegir cuidadosamente el tipo de recorrido.
B

D
• Un recorrido de un árbol binario requiere
E que cada nodo del árbol sea procesado
(visitado) una vez y sólo una en una
secuencia predeterminada. Existen dos
enfoques generales para la secuencia de
B
A

C
recorrido: profundidad y anchura.
D E F
38
G H
A
Enfoques generales para la
B E F

secuencia de recorrido
C D G H I

• En el recorrido en profundidad, el proceso


exige un camino desde el nodo raíz a través de
un nodo hijo, al descendiente más lejano del
primer hijo antes de proseguir a un segundo
A hijo. En otras palabras, en el recorrido en
B profundidad, todos los descendientes de un hijo
C se procesan antes del siguiente hijo.
D
E • En el recorrido en anchura, el proceso se realiza
horizontal desde el nodo raíz a todos sus hijos,
a continuación a los hijos de sus hijos y así
sucesivamente hasta que todos los nodos han
A
sido procesados. En otras palabras, en el
B C
recorrido en anchura, cada nivel se procesa
totalmente antes de que comience el siguiente
nivel.
D E F
39
G H
A

B E F Recorrido en profundidad
C D G H I

• Dado un árbol binario que consta de un


nodo raíz, un subárbol izquierdo y un
subárbol derecho, se pueden definir tres
tipos de secuencia de recorrido en
A
profundidad. La designación adicional de
B
los recurridos utiliza un nombre para el
nodo raíz (N), para el subárbol izquierdo (I)
C

y para el subárbol derecho (D).


D
E

• Los recorridos se conocen como:


1. Preorden (preorder)
2. Enorden (inorder)
A
3. Postorden (postorder)
B C

D E F
40
G H
A
Recorrido en profundidad
B E F
“Preorden”
C D G H I

• Preorden (nodo-izquierdo-derecho) (NID)

A
B

D
E • El recorrido preorden (NID) conlleva los siguientes
pasos, en los que el nodo raíz va antes que los
subárboles:
1. Recorrer el nodo raíz (N).
2. Recorrer el subárbol izquierdo (I) en preorden.
A
3. Recorrer el subárbol derecho (D) en preorden.
B C

D E F
41
G H
A
Recorrido en profundidad
B E F
“Preorden”
C D G H I

Dadas las características recursivas de los árboles, el


algoritmo de recorrido tiene naturaleza recursiva.
Primero, se procesa la raíz, a continuación el subárbol
izquierdo y a continuación el subárbol derecho. Para
A
procesar el subárbol izquierdo, se hace una llamada
B
recursiva al procedimiento preorden y luego se hace
C
lo mismo con el subárbol derecho.
D
E El algoritmo recursivo correspondiente para un árbol
T es:
si T no es vacío entonces
inicio
ver los datos en el nodo raíz de T
A
Preorden (subárbol izquierdo del raíz de T)
B C Preorden (subárbol derecho del raíz de T)
D E F fin
42
G H
A
Recorrido en profundidad
B E F
“Preorden”
C D G H I

A A
Camino A ,B, D, E, C, F, G
B
1
C
C
D B

E 2 5
D E F G

3 4 6 7

B C

D E F
43
G H
A
Recorrido en profundidad
B E F
“Preorden”
C D G H I
public class Arbol {
……
public void preorden(){
if (raiz != null){
raiz.re_preorden(); public class Nodo {
A
} ……
B
} public void re_preorden(){
C
…… System.out.prin(dato);
D
} if (izda != null)
E
izda.re_preorden();
if (dcha != null)
dcha.re_preorden();
}
A ……
B C }
D E F
44
G H
A
Recorrido en profundidad
B E F
“Enorden ”
C D G H I

• Enorden (izquierdo - nodo - derecho) (IND)

A
B

D • El recorrido en orden (inorder) procesa primero el


E subárbol izquierdo, después el nodo 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:
A
1. Recorrer e subárbol izquierdo (I) en inorden.
B C
2. Visitar el nodo raíz (N).
D E F 3. Recorrer el subárbol derecho (D) en inorden.
45
G H
A
Recorrido en profundidad
B E F
“Enorden ”
C D G H I
• El algoritmo recursivo correspondiente para un
árbol T es:
si T no es vacío entonces
inicio
A Enorden (subárbol izquierdo de la raíz de T)
B
ver los datos en el nodo raíz de T
C
Enorden (subárbol derecho de la raíz de T)
D
E
fin

A
Camino D,B, E, A, F, C, G

4
C
B
A
2 6
B C
D E F G
D E F 1 3 5 7 46
G H
A
Recorrido en profundidad
B E F
“Postorden”
C D G H I
public class Arbol {
……
public void enorden(){
if (raiz != null){ public class Nodo {
raiz.re_enorden(); ……
A
} public void re_enorden(){
B
} if (izda != null)
C
…… izda.re_enorden();
D
}
E
System.out.prin(dato);

if (dcha != null)
dcha.re_enorden();
A
}
……
B C
}
D E F
47
G H
A
Recorrido en profundidad
B E F
“Postorden”
C D G H I

• Postorden (izquierdo-derecho-nodo) (IDN)

A
B

D
E • El recorrido postorden (IDN) procesa el nodo raíz
(post) después de que los subárboles izquierdo y
derecho se han procesado. Las etapas del
algoritmo son:
1. Recorrer e subárbol izquierdo (I) en postorden.
A
2. Recorrer el subárbol derecho (D) en postorden.
B C
3. Visitar el nodo raíz (N).
D E F
48
G H
A
Recorrido en profundidad
B E F
“Postorden”
C D G H I
• El algoritmo recursivo correspondiente para
un árbol T es:
si T no es vacío entonces
inicio
A Postorden (subárbol izquierdo de la raíz de T)
B
Postorden (subárbol derecho de la raíz de T)
C
ver los datos en el nodo raíz de T
D
E
fin

A
Camino D ,E, B, F , G, C, A

7
C
B
A
3 6
B C
D E F G
D E F 1 2 4 5 49
G H
A
Recorrido en profundidad
B E F
“Postorden”
C D G H I
public class Arbol {
……
public void postorden(){
if (raiz != null){ public class Nodo {
raiz.re_postorden(); ……
A
} public void re_postorden(){
B
} if (izda != null)
C
…… izda.re_postorden();
D
} if (dcha != null)
E
dcha.re_postorden();
System.out.prin(dato);
}
……
A
}
B C

D E F
50
G H
A

B E F Profundidad de un árbol binario


C D G H I

• La profundidad de un árbol binario es una


característica que se necesita conocer con
frecuencia durante el desarrollo de una aplicación
con árboles. El método de la clase Arbol
A
profundidad obtiene ésta con el método del mismo
B
nombre de la clase Nodo que es llamado desde la
C
raíz del árbol.
D
• El caso más sencillo de cálculo de la profundidad
E
es cuando el árbol está vacío, en cuyo caso la
profundidad es 0 Si el árbol no está vacío, cada
rama debe tener su propia profundidad, por lo que
se necesita evaluar cada una por separado. Las
variables profI, profD almacenarán las
A profundidades de las ramas izquierda y derecha
B C
respectivamente.
D E F
51
G H
A

B E F Profundidad de un árbol binario


C D G H I

• El método de cálculo de la profundidad de


las ramas utiliza llamadas recursivas al
método profundidad con referencias a las
A
respectivas ramas o subárboles de la misma.
B

C El método profundidad devuelve como


D resultado la mayor profundidad de las
E
ramas más 1 (correspondiente del nodo
raíz).

B C

D E F
52
G H
A

B E F Profundidad de un árbol binario


C D G H I
public class Nodo {
……
public int profundidad (){
public class Arbol { int profI, profD;
…… if (izda != null)
A public int profundidad(){ profI = izda.profundidad();
B if (raiz != null){ else
C return raiz.profundidad(); profI = 0;
else if (dcha != null)
D
E return 0; profD = dcha.profundidad();
} else
} profD = 0;
…… if (profI > profD)
} return profI + 1;
A
else
return profD + 1;
B C
}
D E F
…… 53
G H }
A

B E F ÁRBOL BINARIO DE BUSQUEDA


C D G H I

• Los árboles vistos hasta ahora no tienen un


orden definido; sin embargo, los árboles
binarios ordenados tienen sentido. Estos
árboles se denominan árboles binarios de
búsqueda, debido a que se puede buscar en
A
B

C ellos un término, utilizando un algoritmo de


D búsqueda binaria.
E

• Un árbol binario de búsqueda es aquel que


dado un nodo, todos los datos del subárbol
A
izquierdo son menores que los datos de ese
B C
nodo, mientras que todos los datos del subárbol
D E F
derecho son mayores que sus propios datos.
54
G H
A
Creación de un árbol binario de
B E F
búsqueda
C D G H I

• Construir un árbol binario de búsqueda


para almacenar los datos 12, 8, 7, 16 y 14

A
B

C
12
D
E
8 16

7 14
A

B C

D E F
55
G H
A
Implementación de un nodo de un
B E F
árbol binario de búsqueda
C D G H I

• Un árbol binario de búsqueda se puede


utilizar cuando se necesita que la
información se encuentre rápidamente. Un
ejemplo de árbol binario que se estudia a
A
continuación es el que cada nodo contiene
B
información relativa a una persona. Cada
persona se identifica con su nombre y el
C

número de matrícula en su universidad


D
E
(dato entero).

Declaración de típos
A Nombre Tipo de dato cadena (String)
B C numMat Tipo entero
D E F
56
G H
A
Implementación de un nodo de un
B E F
árbol binario de búsqueda
C D G H I
Nombre
numMat
izqda dcha

A
B
class NodoUniversitario {
C
int numMat;
String nombre;
D
E
NodoUniversitario izqda;
NodoUniversitario dcha;

public NodoUniversitario(int mat, String nom) {


numMat = mat;
A nombre = nom;
B C izda = dcha = null;
D E F
}
G H
} 57
A
OPERACIONES ÁRBOL BINARIO
B E F
DE BUSQUEDA
C D G H I

• De lo expuesto se deduce que los árboles


binarios de búsqueda tienen naturaleza
recursiva y en consecuencia las operaciones
sobre los árboles son recursivas, si bien siempre
A tenemos la opción de realizarlas de forma
B iterativa. Las operaciones Con árboles binarios
C como profundidad y recorrido también son
D operaciones de árboles de búsqueda; además,
E tienen operaciones específicas. Estas
operaciones son:
» Búsqueda de un nodo.
» Inçerción de un nodo.
A » Borrado de un nodo.
B C

D E F
58
G H
A

B E F Búsqueda
C D G H I

• La búsqueda de un nodo con una cierta


clave comienza en el nodo raíz y sigue
estos pasos:
A
1. La clave buscada se compara con la clave del
B
nodo raíz.
C
2. Si las claves son iguales, la búsqueda se
D
detiene.
E
3. Si la clave buscada es mayor que la clave
raíz, la búsqueda se reanuda en el subárbol
derecho. Si la clave buscada es menor que la
clave raíz, la búsqueda se reanuda con el
A subárbol izquierdo.
B C

D E F
59
G H
A

B E F Búsqueda
C D G H I
// clase ArbolBusqueda
public boolean buscar(int buscado){
if (raiz != null)
return (raiz.buscarNodo(buscado) != null);
else
A
return false;
B
}
C // clase NodoUniversitario
public NodoUniversitario buscarNodo(int buscado){
D
if (buscado == numMat)
E return this;
else if (buscado < numMat)
if (izda != null)
return izda.buscarNodo (buscado);
else
return nuli;
A else if (buscado > numMat)
B C
if (dcha != null)
return dcha.buscarNodo (buscado);
D E F else
return null; 60
G H
}