Está en la página 1de 21

Tema 4: árboles y grafos

1. Introducción
El árbol es una estructura de datos muy importante en informática y en ciencias de
computación. Los árboles son estructuras no lineales, al contrario que los arrays y las
listas enlazadas, que constituyen estructuras lineales. Los árboles se utilizan para
representar fórmulas algebraicas, para organizar objetos en orden de tal forma que las
búsquedas sean muy eficientes y en aplicaciones diversas tales como inteligencia artificial
o algoritmos de cifrado. Casi todos los sistemas operativos almacenan sus archivos en
árboles o estructuras similares a árboles. Además de las aplicaciones citadas, los árboles se
utilizan en diseño de compiladores, procesado de texto y algoritmos de búsqueda.
2. Árboles generales y terminología
Intuitivamente, el concepto de árbol implica una estructura en la que los datos se organizan
de modo que los elementos de información están relacionados entre sí a través de ramas. El
árbol genealógico es el ejemplo típico más representativo del concepto de árbol general. La
Figura 1 representa un ejemplo de árbol general, gráficamente puede verse como un árbol
invertido, con la raíz en la parte más alta, de la que salen ramas que llegan a las hojas, que
están en la parte baja.

Figura 1:Estructura jerárquica tipo árbol

Un árbol consta de un conjunto finito de elementos, denominados nodos (r, denominado


nodo raiz) y de un conjunto finito de líneas dirigidas, denominadas ramas, que conectan
los nodos. El número de ramas asociado con un nodo es el grado del nodo.
Definición 1: Un árbol consta de un conjunto finito de elementos, llamados nodos y de un
conjunto finito de líneas dirigidas, llamadas ramas, que conectan los nodos.
Definición 2: Un árbol es un conjunto de uno o más nodos tales que:
1. Hay un nodo diseñado especialmente llamado raíz.
2. Los nodos restantes se dividen en n ≥ 0 conjuntos disjuntos, T1 ...Tn, tal que cada uno de
estos conjuntos es un árbol. A T1...Tn se les denomina subárboles de raíz.
Si un árbol 55, entonces el primer nodo se llama raíz. Obsérvese en la definición 2 que el
árbol ha sido definido de modo recursivo, ya que los subárboles se definen como árboles.

1
La Figura 2 muestra un árbol.

Figura 2: Árbol

3. Terminología
Para comprender mejor que es un árbol comenzaremos explicando cómo está estructurado.
Nodos: Se le llama Nodo a cada elemento que contiene un Árbol.
Nodo Raíz: Se refiere al primer nodo de un Árbol, Solo un nodo del Árbol puede ser la
Raíz.
Nodo Padre: Se utiliza este término para llamar a todos aquellos nodos que tiene al menos
un hijo.
Nodo Hijo: Los hijos son todos aquellos nodos que tiene un padre.
Nodo Hermano: Los nodos hermanos son aquellos nodos que comparte a un mismo padre
en común dentro de la estructura.
Nodo Hoja: Son todos aquellos nodos que no tienen hijos, los cuales siempre se encuentran
en los extremos de la estructura.
Nodo Rama: Estos son todos aquellos nodos que no son la raíz y que además tiene al
menos un hijo.

2
Figura 3: La imagen muestra de forma gráfica cuales son los nodos Raíz, Rama, Hoja.

Figura 4: La siguiente imagen muestra de forma gráfica los nodos Padre, Hijo y Hermanos

Los arboles además de los nodos tiene otras propiedades importantes que son utilizadas en
diferentes ámbitos los cuales son:

Nivel: Nos referimos como nivel a cada generación dentro del árbol.

Por ejemplo, cuando a un nodo hoja le agregamos un hijo, el nodo hoja pasa a ser un nodo rama,
pero además el árbol crece una generación por lo que el Árbol tiene un nivel más. Cada
generación tiene un número de Nivel distinto que las demás generaciones.

 Un árbol vacío tiene 0 niveles


 El nivel de la Raíz es 1
 El nivel de cada nodo es calculado contando cuantos nodos existen sobre él, hasta llegar a
la raíz + 1, y de forma inversa también se podría contar cuantos nodos existes desde la raíz
hasta el nodo buscado + 1.

3
Altura: Le llamamos Altura al número máximo de niveles de un Árbol.

Figura 5: En la imagen se muestran los Niveles y la Altura de un Árbol.

La altura es calculada mediante recursividad tomando el nivel más grande de los dos sub-árboles
de forma recursiva de la siguiente manera:

altura = max(altura(hijo1), altura(hijo2),altura(hijoN)) + 1

Peso: Conocemos como peso al número de nodos que tiene un Árbol. Este factor es importante
porque nos da una idea del tamaño del árbol y el tamaño en memoria que nos puede ocupar en
tiempo de ejecución (Complejidad Espacial en análisis de algoritmos.)

Figura 6:La imagen nos muestra cómo se calcula el peso de un Árbol, el cual es la suma de todos sus nodos, sin importar
el orden en que sean contados.

4
El peso se puede calcular mediante cualquier tipo de recorrido el cual se va contando los nodos a
medida que avanza sobre la estructura. El peso es un árbol es igual a la suma del peso de los sub-
árboles hijos + 1

peso = peso(hijo1) + peso(hijo2) + peso(hijoN)+ 1

Orden: El Orden de un árbol es el número máximo de hijos que puede tener un Nodo.

Figura 7:Imagen que nuestra dos Árboles con Orden = 2(Izquierda) y un segundo con Orden = 3(Derecha).

Notemos que un Árbol con Orden = 1 no tendría sentido ya que sería una estructura lineal ya que
cada nodo solo podría tener un Hijo y tendríamos un Árbol como la Imagen de la Fig.8.

Figura 8: Estructura Lineal

Este valor no lo calculamos, si no que ya lo debemos conocer cuando diseñamos nuestra


estructura, ya que si queremos calcular esto lo que obtendremos es el grado.

Grado: El grado se refiere al número mayor de hijos que tiene alguno de los nodos del Árbol y está
limitado por el Orden, ya que este indica el número máximo de hijos que puede tener un nodo.

5
Figura 9:En la imagen podemos apreciar un Árbol con grado 2(Izquierda) y un otro con grado 3(Derecha).

El grado se calcula contando de forma recursiva el número de hijos de cada sub-árbol hijo y el
número de hijos del nodo actual para tomar el mayor, esta operación se hace de forma recursiva
para recorrer todo el árbol.

grado = max(contarHijos(hijo1),contarHijos(hijo2), contarHijos(hijoN), contarHijos(this))

Sub-Árbol: Conocemos como Sub-Árbol a todo Árbol generado a partir de una sección
determinada del Árbol, Por lo que podemos decir que un Árbol es un nodo Raíz con N Sub-
Árboles.

Figura 10:En la imagen de puede apreciar que un Árbol está compuesto por una seria de Sub-Arboles los cual conforman
toda la estructura.

Existen escenarios donde podemos sacar un Sub-Árboles del Árbol para procesarlo de forma
separada, de esta forma el Sub-Árboles pasa a ser un Árbol independiente, También podemos
eliminar Sub-Árboles completos, Agregarlos, entre otras operaciones.

6
4. Tipos de árboles
4.1. Árbol n-ario

Los arboles n-arios son aquellos arboles donde el número máximo de hijos por nodo es de N, en la
figura 9 podemos apreciar dos árboles con grado 2 y grado 3, estos dos árboles también los
podemos definir como Árbol n-ario con n = 2 y n=3 respectivamente.

4.2. Árboles binarios

Esta estructura se caracteriza por que cada nodo solo puede tener máximo 2 hijo, dicho de otra
manera, es un Árbol n-ario de Grado 2.

Figura 11:En la imagen podemos apreciar un Árbol Binario.

4.3. Árbol binario lleno: Es aquel en la que el nodo tiene cero o 2 hijos con excepción de la
Raíz.

Figura 12:Podemos apreciar que el árbol de la derecha no está lleno ya que uno de sus nodos no cumple con la condición
cero o 2 hijos. ya que el nodo C solo tiene un hijo.

4.4. Árbol binario perfecto: Es un Árbol lleno en donde todos las Hojas están en el mismo
Nivel.

7
En la imagen podemos apreciar que el árbol de la izquierda tiene todas sus hojas al mismo nivel y
que además está lleno, lo que lo convierte en un árbol binario perfecto. Sin embargo, del lado
derecho podemos ver que, aunque el árbol está lleno no tiene todas las hojas al mismo nivel lo
que hace que no sea un árbol binario perfecto, pero si lleno.

5. Recorrido sobre Árboles

Los recorridos son algoritmos que nos permiten recorrer un árbol en un orden especifico, los
recorridos nos pueden ayudar encontrar un nodo en el árbol, o buscar una posición determinada
para insertar o eliminar un nodo.

Básicamente podemos catalogar las búsquedas en dos tipos, las búsquedas en profundidad y las
búsquedas en amplitud.

6. Búsquedas no informadas

Las búsquedas no informadas son aquellas en que se realiza el viaje por todo el árbol sin tener una
pista de donde pueda estar el dato deseado. Este tipo de búsquedas también se conocen como
búsquedas a ciegas.

Para comprender mejor que es una búsqueda no informada expondremos el siguiente ejemplo:

Imagine que vamos por la carretera y de repente encontramos dos caminos, el problema aquí es
que uno después de 50 kilómetros está en construcción y el otro nos lleva a nuestro destino, sin
embargo, ninguno de los caminos tiene señalamiento. Lo que tendríamos que hacer es recorrer el
primero camino y después de 50 kilómetros encontrarnos con que el camino está en construcción,
entonces tendríamos que regresar para irnos por el segundo camino, el cual nos lleva a nuestro
destino (Para esto ya recorrimos los 50 kilómetros de ida y los 50 kilómetros de regreso lo que nos
da 100 kilómetros más a nuestra ruta).

A este tipo de escenarios en los cuales las búsquedas de hacen a ciegas los conocemos como
búsquedas no informadas.

Los siguientes métodos de búsqueda que veremos a continuación (Búsqueda en profundad y


Búsqueda en amplitud) pertenecen a las búsquedas no informadas.

8
6.1.Búsqueda en profundidad
 Recorrido Pre-orden: El recorrido inicia en la Raíz y luego se recorre en pre-orden cada
uno de los sub-árboles de izquierda a derecha.

Esta definición puede ser un poco compleja de entender por lo que mejor les dejo la siguiente
imagen.

Figura 13:En la imagen podemos ver el orden en que es recorrido el árbol iniciando desde la Raíz.

 Recorrido en pos-orden cada uno de los sub-árboles y al final se recorre la raíz.

Para comprender mejor esta definición observemos la siguiente imagen:

En la imagen podemos observar cómo se realiza el recorrido en Pos-Orden, Sin embargo, es


importante notar que el primer nodo que se imprime no es la Raíz pues en este recorrido la Raíz
de cada Sub-Árbol es procesado al final, ya que toda su descendencia ha sido procesada.

9
 Recorrido in-orden: Se recorre en in-orden el primer sub-árbol, luego se recorre la raíz y al
final se recorre en in-orden los demás sub-árboles.

En la imagen se muestra como es el recorrido In-Orden, Podemos apreciar que la Raíz no es el


primero elemento en ser impreso pues este recorrido recorre su rama izquierda, luego la raíz del
sub-árbol y luego la rama derecha.

6.2. Búsqueda en amplitud.

Se recorre primero la raíz, luego se recorren los demás nodos ordenados por el nivel al que
pertenecen en orden de Izquierda a derecha.

Este tipo de búsqueda se caracteriza por que la búsqueda se hace nivel por nivel y de izquierda a
derecha.

Figura 14:En la imagen se observa cómo es que un nodo es buscado mediante la búsqueda en profundidad.

10
En la imagen podemos observar que el árbol es recorrido en su totalidad, pero esto no siempre es
así, ya que el algoritmo se detiene cuando el elemento buscado es encontrado.

7. Árbol de expresiones
Una aplicación muy importante de los árboles binarios son los árboles de expresiones. Una
expresión es una secuencia de tokens (componentes de léxicos que siguen unas reglas
establecidas). Un token puede ser un operando o bien un operador.

Figura 15:Una expresión infija y su árbol de expresión

La Figura 15 representa la expresión infija a * (b + c) + d junto a su árbol de expresión. El nombre


de infija es debido a que los operadores se sitúan entre los operandos.

Un árbol de expresión es un árbol binario con las siguientes propiedades:

1. Cada hoja es un operando.


2. Los nodos raíz y los nodos internos son operadores.
3. Los subárboles son subexpresiones cuyo nodo raíz es un operador.

Los árboles binarios se utilizan para representar expresiones en memoria, esencialmente en


compiladores de lenguajes de programación. Se observa que los paréntesis de la expresión no
aparecen en el árbol, pero están implicados en su forma, y esto resulta muy interesante para la
evaluación de la expresión.

Si se supone que todos los operadores tienen dos operandos, se puede representar una expresión
mediante un árbol binario cuya raíz 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.) o una subexpresión representada como un subárbol. La Figura 16 muestra un árbol
cuya raíz es el operador *, su subárbol izquierdo representa la subexpresión (x + y) y su subárbol
derecho representa la subexpresión (a - b). El nodo raíz del subárbol izquierdo contiene el
operador (+) de la subexpresión izquierda y el nodo raíz del subárbol derecho contiene el operador
(-) de la subexpresión derecha. Todos los operandos letras se almacenan en nodos hojas.

11
Figura 16:Árbol de expresión (x + y)*(a - b)

Utilizando el razonamiento anterior, la expresión (x * (y - z)) + (a - b) con paréntesis alrededor de


las subexpresiones, forma el árbol binario de la Figura 17.

Figura 17:Árbol de expresión (x * (y - z))+(a - b)

Ejemplo 1: Deducir las expresiones que representan los árboles binarios:

a) X * Y /(-Z)

b) A + B * (-(C + D))

c) A * (X + Y) * C

Ejemplo 2: Dibujar la representación en árbol binario de cada una de las 
siguientes expresiones:

12
a) Y * X /(A + B)* C
b) X * Y /A + B * C
8. Reglas para la construcción de árboles de expresiones
Los árboles de expresiones se utilizan en las computadoras para evaluar expresiones
usadas en programas. El algoritmo más sencillo para construir un árbol de expresión
es aquel que lee una expresión completa que contiene paréntesis. Una expresión con
paréntesis es aquella en que:
1. La prioridad se determina sólo por paréntesis.
2. La expresión completa se sitúa entre paréntesis.
A fin de ver la prioridad en las expresiones, considérese la expresión
a * c + e / g - (b + d)
Los operadores con prioridad más alta son * y /, es decir:
(a * c) + (e / g) - (b + d)
Los operadores que siguen en orden de prioridad son + y -, que se evalúan de
izquierda a derecha. Por consiguiente, se puede escribir:
((a * c) + (e / g)) - (b + d)
Por último, la expresión completa entre paréntesis será:
(((a * c) + (e / g)) - (b + d))
El algoritmo para la construcción de un árbol de expresión puede expresarse en los
siguientes pasos:
1. La primera vez que se encuentre un paréntesis a izquierda “(“, crear un nodo
que será el nodo raíz. Se llama a éste nodo actual y se sitúa en una pila.
2. Cada vez que se encuentre un nuevo paréntesis a izquierda “(”, crear un nuevo
nodo. Si el nodo actual no tiene un hijo izquierdo, hacer el nuevo nodo el hijo
izquierdo; en caso contrario, hacerlo el hijo derecho. Hacer el nuevo nodo el nodo 
actual y ponerlo en la pila.
3. Cuando se encuentre un operando, crear un nuevo nodo y asignar el operando a
su campo de datos. Si el nodo actual no tiene un hijo izquierdo, hacer el nuevo
nodo el hijo izquierdo; en caso contrario, hacerlo el hijo derecho.
4. Cuando se encuentre un operador, sacar el nodo cabeza de la pila y situar el
operador en el campo dato del nodo.
5. Ignorar el paréntesis derecho y los blancos.
Ejercicios:
1. Dado los siguientes árboles, determinar los recorridos Pre-orden, In-orden y Post-
orden
a) c * d + e
(c*d)+e
Pre–orden:raíz-izq-der: +*cde
In-orden:izq-raíz-der: c*d+e
Post-orden:izq-der-raíz: cd*e+

13
b) [((a + b) * c/d) + e ^ f]/g

Pre–orden:raíz-izq-der:/+*+ab/cd^efg
In-orden:izq-raíz-der:a+b*c/d+e^f/g
Post-orden:izq-der-raíz:ab+cd/*ef^+g/

c) Árbol

Pre–orden:raíz-izq-der:MEBADLPNVTZ
In-orden:izq-raíz-der:ABDELMNPTVZ
Post-orden:izq-der-raíz:ADBLENTZVPM

2. El recorrido en pre-orden de un determinado árbol binario es: GEAIBMCLDFKJH


y en in-orden IABEGLDCFMKHJ .Resolver:

14
a) Dibujar el árbol binario.
b) Dar el recorrido en post-orden.

3. El recorrido en pre-orden de un determinado árbol binario es: ABDGEHICFJK y


en in-orden GDBHIACJKF Resolver:
a) Dibujar el árbol binario.
b) Dar el recorrido en post-orden.
9. Árbol binario de búsqueda
Los árboles estudiados 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 ellos un término utilizando
un algoritmo de búsqueda binaria similar al empleado en arrays.
Un árbol binario de búsqueda es aquel en que, dado un nodo, todos los datos del
subárbol izquierdo son menores que los datos de ese nodo, mientras que todos los
datos del subárbol derecho son mayores que sus propios datos.

9.1. Creación de un árbol binario de búsqueda


Se crea un árbol binario de búsqueda con los valores 8, 3, 1, 20, 10, 5, 4. Para todo
nodo del árbol, los datos a su izquierda deben ser menores que el dato del nodo
actual, mientras que todos los datos a la derecha deben ser mayores que el del nodo
actual. Inicialmente, el árbol está vacío y se desea insertar el 8. La única elección es
almacenar el 8 en la raíz:

A continuación, viene el 3. Ya que 3 es menor que 8, el 3 debe ir en el subárbol


izquierdo.

A continuación, se ha de insertar 1, que es menor que 8 y que 3, por consiguiente,


irá a la izquierda y debajo de 3.

15
El siguiente número es 20, mayor que 8, lo que implica debe ir a la derecha de 8.

Cada nuevo elemento se inserta como una hoja del árbol. Los restantes elementos se
pueden situar fácilmente.

Una propiedad de los árboles binarios de búsqueda es que no son únicos para los
mismos datos.
Ejemplo: Construir un árbol binario de búsqueda que corresponda a un recorrido en
orden cuyos elementos son: 1, 3, 4, 5, 6, 7, 8, 9 y 10

9.2. Búsqueda de un nodo


Imaginemos que queremos localizar el nodo con valor 24. El camino que
recorreríamos es el que se pinta en rojo:

16
Empezamos a recorrer el árbol por la raíz, que es con el primer nodo con el que
comparamos. Seguiríamos los siguientes pasos:

 Comparamos el valor buscado (24) con el del nodo raíz (18), como el valor buscado
es mayor, de existir en el árbol, estaría a la derecha.
 Nos movemos al hijo derecho del nodo raíz. Comparamos el valor buscado (24) con
el valor del nodo (25), como el primero es menor, de existir en el árbol, estaría en el
subárbol izquierdo.
 Nos movemos al hijo izquierdo de 25, que es 23.
Comparamos el valor buscado (24) con el valor del nodo (23). Como el primero es
mayor, de existir, estaría a la derecha.
 Nos movemos al hijo derecho de 23, que es 24. Hemos llegado al nodo buscado.
Empezamos a recorrer el árbol por la raíz, que es con el primer nodo con el que
comparamos. Seguiríamos los siguientes pasos:

Comparamos el valor buscado (24) con el del nodo raíz (18), como el valor buscado
es mayor, de existir en el árbol, estaría a la derecha.
Nos movemos al hijo derecho del nodo raíz. Comparamos el valor buscado (24) con
el valor del nodo (25), como el primero es menor, de existir en el árbol, estaría en el
subárbol izquierdo.
Nos movemos al hijo izquierdo de 25, que es 23.
Comparamos el valor buscado (24) con el valor del nodo (23). Como el primero es
mayor, de existir, estaría a la derecha.
Nos movemos al hijo derecho de 23, que es 24. Hemos llegado al nodo buscado.
9.3. Inserción de un nodo
Supongamos que queremos insertar el nodo de valor 30 en nuestro árbol. Lo
primero que hay que hacer es recorrer el árbol buscando el nodo que se quiere
insertar, siguiendo el proceso de búsqueda ya explicado en los dos pasos anteriores.
Si encontramos el nodo con el valor que queremos insertar, daríamos un mensaje de
error diciendo que el nodo ya existe, puesto que no se admiten duplicados.
Por el contrario, si en el proceso de búsqueda llegamos a un hueco, insertamos el
nodo en dicho hueco.
El proceso de inserción para un nodo que no existe, por ejemplo, el nodo 30, se
muestra en la imagen siguiente, marcando en rojo el camino seguido.
17
9.4. Eliminación de un nodo hoja
Habíamos dicho que el proceso de eliminación de un nodo era el más complicado y
que adoptábamos estrategias distintas dependiendo de los hijos que tuviera el nodo a
eliminar.

El caso más sencillo es cuando el nodo no tiene ningún hijo, es decir, cuando es un
nodo hoja.

En este caso, sencillamente buscábamos el nodo y lo eliminábamos. Además


hacíamos que el nodo del padre que le apuntaba, pasara a apuntar a null.
9.5. Eliminación de un nodo con un hijo
Para eliminar un nodo que tenga un hijo, primero lo localizamos, luego hacemos
que el puntero que apunta al nodo a eliminar, pase a apuntar al nodo hijo de este.
El proceso se puede observar en la figura siguiente:

18
 Empezamos localizando el nodo a eliminar, en este caso, aquel con el valor 12.
 Comparamos con el nodo raíz, como 12 es menor que 18, nos movemos al nodo
hijo izquierdo.
 El hijo izquierdo tiene el valor 9, que es menor que 12, luego nos movemos al hijo
derecho de este, y en ese nodo ya encontramos el nodo que buscábamos.
 El nodo con valor 12, tiene un único hijo, el izquierdo, con el valor 11..
 Hacemos que el puntero que apuntaba al nodo a eliminar, puntero ubicado en el
padre del nodo a eliminar, apunte al hijo de este. Es decir, el nodo con valor 9 pasa
a tener un hijo derecho con valor 11.
 Ahora ya podemos borrar el nodo 12.
9.6. Eliminación de un nodo con dos hijos, promocionando un valor del
subárbol izquierdo
Habíamos visto que cuando queremos eliminar un nodo que tiene dos hijos,
tenemos dos posibilidades para rellenar el hueco que este nodo deja: Podemos tomar
el nodo de su subárbol izquierdo que tenga un valor mayor, o el nodo de su subárbol
derecho que tenga un valor menor.

Veamos el primer caso con el ejemplo de la siguiente figura:

 Queremos eliminar nada más ni nada menos que el nodo raíz, con valor 18.
 El nodo raíz tiene dos subárboles, el de la izquierda con nodo raíz con valor
9, y el de la derecha con nodo raíz de valor 25.

19
 Al eliminar el nodo de valor 18, tendremos que reemplazarlo por otro nodo
del árbol, que pasaría a ocupar la posición de este en la estructura. En esta
ocasión, vamos a buscar dicho nodo en el subárbol izquierdo.
 Como buscamos el nodo en el subárbol izquierdo, tenemos que buscar el
nodo de mayor valor, que por como construimos el árbol, coincidirá con el
nodo que este más a la derecha. En nuestro caso, el nodo de valor 12.
 Substituimos el nodo de valor 18 por el de valor 12.
 Eliminamos el nodo inicial de valor 12 que previamente hemos copiado en
el nodo de valor 18. El nodo inicial con valor 12 no puede tener dos hijos, ya
que si tuviera un hijo a la derecha, no sería el nodo mayor del subárbol
izquierdo. Así es que este nodo podrá tener un hijo o ninguno. La
eliminación de un nodo en ambos casos, la he explicado en los pasos 6 y 5
respectivamente.
Tras realizar estas operaciones, nos queda el siguiente árbol binario:

9.7. Eliminación de un nodo con dos hijos, promocionando un valor del


subárbol derecho:
En esta ocasión, al eliminar un nodo con dos hijos, vamos a buscar en el subárbol
derecho, el nodo más pequeño, el que tenga el menor valor.
Para ver como procederíamos, usamos el mismo ejemplo que en el caso anterior,
sólo que recorreremos el subárbol derecho y buscaremos el valor menor de todos los
nodos.
En la siguiente figura, podemos apreciar el proceso:

 Queremos eliminar el nodo raíz, con valor 18.

20
 Buscamos en el subárbol derecho, el nodo que contenga el menor valor, que
coincidirá con aquel que este más a la izquierda en el subárbol derecho. Este
nodo es el nodo con valor 21.
 Substituimos el nodo de valor 18 por el de valor 21.
 Eliminamos el nodo inicial de valor 21 que previamente hemos copiado en
el nodo de valor 18.
Tras realizar estas operaciones, nos queda el siguiente árbol binario:

21

También podría gustarte