estructuras de datos - · pdf fileasignatura: (tis-106) estructuras de datos ii docente:...
Post on 22-Mar-2018
222 Views
Preview:
TRANSCRIPT
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 1 -
TEMA 3. Árboles binarios de búsqueda
Los árboles binarios de búsqueda son estructuras de datos que presentan un gran
rendimiento cuando las funciones a realizar implican búsquedas, inserciones y
eliminación de nodos. De hecho, con un árbol de búsqueda, dichas operaciones se
pueden realizar tanto a partir de un valor clave, como por un valor ordinal (es decir,
encontrar un elemento con clave x, encontrar el sexto elemento más pequeño, borrar
el elemento con clave x, borrar el sexto elemento más pequeño, insertar un elemento
y determinar su ordinal dentro del árbol).
Definición: un árbol binario de búsqueda es un árbol binario, que puede estar vacío, y
que si es no vacío cumple las siguientes propiedades:
(1) Todos los nodos están identificados por una clave y no existen dos
elementos con la misma clave.
(2) Las claves de los nodos del subárbol izquierdo son menores que la clave del
nodo raíz.
(3) Las claves de los nodos del subárbol derecho son mayores que la clave del
nodo raíz.
(4) Los subárboles izquierdo y derecho son también árboles binarios de búsqueda.
La primera propiedad resultaría redundante, ya que de las propiedades (2), (3) y (4)
se puede deducir que la clave de un nodo es única. Sin embargo, la aparición explícita de esta propiedad hace que la definición sea más clara.
Ejemplos de árboles binarios de búsqueda:
Veamos ahora cómo manipular este tipo especial de árboles binarios. Estudiaremos
las operaciones de búsqueda, inserción y borrado.
Búsqueda
La definición de árbol binario de búsqueda especifica un criterio en la estructuración
del árbol en función de las claves de los nodos. En este caso, existe un criterio de
ordenación de los nodos. Por lo tanto, será bastante simple describir un método eficiente de búsqueda que explote esta ordenación.
Suponer que se busca un elemento que posea la clave x. La búsqueda comenzará
por el nodo raíz del árbol. La clave de ese nodo informará por dónde debe continuar la
búsqueda, ya no es necesario recorrer exhaustivamente todos los nodos del árbol. Si la
clave del nodo es igual a x, la búsqueda finaliza con éxito. Si la clave es menor que x,
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 2 -
se sabe que si existe un nodo en el árbol que posea como clave el valor x deberá estar
en el subárbol derecho, por lo tanto la búsqueda deberá continuar por esa parte del
árbol. Si, por el contrario, la clave del nodo es mayor que x, entonces la búsqueda
deberá continuar por el subárbol izquierdo. El proceso continuará hasta que se
encuentre un nodo con clave igual a x o un subárbol vacío, en cuyo caso se puede
asegurar que no existe ningún nodo con clave x en el árbol. Este método de búsqueda sugiere seguir un esquema recursivo.
Suponiendo que la clave que identifica cada nodo es un campo contenido en la
información general del nodo, el algoritmo de búsqueda quedaría como sigue:
Algoritmo Buscar (recursivo)
Entradas
p: arbol
x: Valor (valor a buscar)
Variable
aux: ABB (arbol binario de busqueda)
Inicio
si (p = NULO) entonces devolver(NULO)
sino
si (x = p^.info.clave) entonces devolver(p)
sino
si (x < p^.info.clave) entonces devolver(Buscar(x, p^.Izq))
sino
devolver(Buscar(x, p^.Der))
fin_sino
fin_sino
Fin
En este ejemplo, la recursividad puede ser fácilmente sustituida por un esquema
iterativo mediante la utilización de un bucle de repetición "mientras". En ese caso, el algoritmo de búsqueda iterativo sería:
Algoritmo Buscar (iterativo)
Entradas
p: arbol
x: Valor (valor a buscar)
Variables
aux: arbol
enc: (cierto, falso)
Inicio
aux <-- p
enc <-- FALSO
mientras (aux <> NULO) Y (enc = FALSO) hacer
si (aux^.info = x) entonces
enc <-- CIERTO
sino
si (x < aux^.info) entonces aux <-- aux^.Izq
sino
aux <-- aux^.Der
fin_sino
Buscar <-- enc
fin_mientras
Fin
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 3 -
El proceso de búsqueda en un árbol binario de búsqueda resulta muy eficaz. El coste
asociado sería del orden de O(h), donde h es la altura del árbol. Hay que hacer notar
que la dependencia es lineal con la altura del árbol y no con el número de elementos
del mismo. En función del número de nodos del árbol, n, el coste sería logarítmico
(O(log n)).
El método de búsqueda se asemeja mucho al método de búsqueda binaria sobre
arrays ordenados, tras la comparación con un elemento se puede decidir en qué región
de la estructura se puede encontrar la información buscada, descartándose el resto de
los elementos de la estructura. De esta forma, se reduce considerablemente el número
de comparaciones necesarias para localizar el elemento.
Inserción
La inserción de un nuevo nodo en un árbol binario de búsqueda debe realizarse de
tal forma que se mantengan las propiedades del árbol. De modo que lo primero que
hay que hacer es comprobar que en el árbol no existe ningún nodo con clave igual a la
del elemento que se desea insertar. Si la búsqueda de dicha clave falla, entonces se
insertará el nuevo nodo en el punto donde se ha parado la búsqueda, que será el
punto del árbol donde, de existir, debería estar ubicada dicha clave. Hay que
considerar que todo proceso de búsqueda fallido termina en un enlace nulo, por tanto, el nodo a insertar siempre será un nodo terminal, lo que facilitará la operación.
El algoritmo que implementa la estrategia de inserción es el siguiente:
Algoritmo Insertar
Entradas
arb: arbol (por referencia)
x: Valor
Salida
(cierto, falso)
Variables
p, q: arbol
enc: (cierto, falso)
Inicio
(buscar la clave en el arbol, p indica su localización)
(si p = NULO entonces no está, q es el padre de p)
q <-- NULO
p <-- arb
enc <-- FALSO
mientras (p <> NULO) Y (enc = FALSO) hacer
q <-- p
si (x.clave = p^.info.clave) entonces enc <-- CIERTO
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 4 -
sino
si (x.clave < p^.info.clave) entonces p <-- p^.Izq
sino p <-- p^.Der
fin_sino
fin_mientras
(insertamos)
si (enc = FALSO) entonces
crear_espacio(p)
p^.Izq <-- NULO
p^.Der <-- NULO
p^.info <-- x
si (q = NULO) entonces arb <-- p (insertar la raíz)
sino
si (x.clave < q^.info.clave) entonces q^.Izq <-- p
sino q^.Der <-- p
fin_sino
devolver(cierto)
sino devolver(falso)
Fin
Borrado
La operación de borrado en un árbol de búsqueda es muy simple. Hay que tener en
cuenta que en todo árbol de búsqueda los nodos se pueden ordenar por su clave si se
recorre el árbol siguiendo el criterio infijo. El orden establecido por este recorrido se
debe mantener aunque se elimine un nodo del árbol. Por tanto, no hay más que utilizar
el algoritmo de borrado sobre árboles binarios cuando se desea mantener el orden
infijo de los nodos. Este algoritmo ha sido visto con anterioridad en este capítulo y no es necesario repetirlo en este apartado.
Árbol Binario de Búsqueda (ABB)
Este tipo de árbol permite almacenar información ordenada.
Reglas a cumplir:
Cada nodo del árbol puede tener 0, 1 ó 2 hijos.
Los descendientes izquierdos deben tener un valor menor al padre.
Los descendientes derechos deben tener un valor mayor al padre.
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 5 -
Ejemplos de ABB…
13
21
5 18
15
25
40
36
3321
30
32
43
41
33
¿Por qué no son ABB?
13
21
17 18
15
25
40
22
331
5
2 4
6
Proceso para buscar un nodo...
13
21
10 18 2540
33
¿El 25 es mayor o
menor que el 21?
Buscar el 25
13
21
10 18 2540
33
¿El 25 es
mayor o menor
que el 33?
13
21
10 18 2540
33
Encontrado
Paso
1Paso
2
Paso
3
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 6 -
Proceso para agregar nodos...
Reglas:
El valor a insertar no existe en el árbol.
El nuevo nodo será un Nodo Hoja del
árbol.
Procedimiento
1. Buscar el Nodo Padre del nodo a
agregar.
2. Agregar el nodo.
Ejemplo
13
21
10 18 2540
33
¿El 26 es mayor o
menor que el 21?
Agregar el valor 26
13
21
10 18 2540
33
¿El 26 es
mayor o menor
que el 33?
13
21
10 18 2540
33
Se encontró el Nodo
Padre
Paso
1Paso
2
Paso
3
13
21
10 18 2540
33
Agregar el nodo
Paso
4
26
Comentarios importantes....
El orden de inserción de los datos, determina la forma del
ABB.
¿Qué pasará si se insertan los datos en forma ordenada?
La forma del ABB determina la eficiencia del proceso de
búsqueda.
Entre menos altura tenga el ABB, más balanceado estará, y
más eficiente será.
13
10
18
21
25
Este árbol está
desbalanceado
porque los valores se
agregaron en el siguiente
orden:
10, 13, 18, 21, 25, 33, 40
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 7 -
Proceso para eliminar un nodo
Si el nodo a eliminar es un:
Nodo hoja Buscar el Nodo Padre del nodo a borrar.
Desconectarlo.
Liberar el nodo.
Nodo con un hijo Buscar el Nodo Padre del nodo a borrar.
Conectar el hijo con el padre del nodo a borrar.
Liberar el nodo.
Nodo con dos hijos Localizar el nodo predecesor o sucesor del nodo a borrar.
Copiar la información.
Eliminar el predecesor o sucesor según sea el caso.
Caso: Eliminar Nodo hoja
13
21
10 18 25 40
33
Nodo Padre
localizado
13
21
10 18 2540
33
Desconectarlo y
liberar el nodo
Paso
1
Paso
2
Eliminar el valor 25
Caso: Eliminar Nodo con un hijo
13
21
10 18 25 40
33
Nodo Padre
localizado
13
21
10 18
25
40
33
Conectar el Nodo
Padre con el Nodo
Hijo y liberar el
nodo.
Paso
1
Paso
2
Eliminar el valor 25
29
27 30
29
27 30
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 8 -
Caso: Eliminar nodo con dos hijos
1. Localizar el nodo predecesor o sucesor del nodo a borrar.
El PREDECESOR es “el Mayor de los Menores”.
El SUCESOR es “el Menor de los Mayores”.
Para la implementación es igual de eficiente programar la búsqueda del predecesor que del sucesor.
2. El valor del Predecedor (o sucesor) se copia al nodo a borrar.
3. Eliminar el nodo del predecesor (o sucesor según sea el caso).
Predecesor
13
21
10 25 40
33
29
27 30
El predecesor de: Es:
33 30
21 13
29 27
Uno a la IZQUIERDA y todo a la DERECHA
Sucesor
13
21
10 18 25 40
33
29
27 30
El sucesor de: Es:
21 25
33 40
29 30
Uno a la DERECHA y todo a la IZQUIERDA
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 9 -
Caso: Eliminar Nodo con dos hijos
13
21
10 18 2540
33
Localizar el valor a
borrarPaso
1
Eliminar el valor 21
utilizando el predecesor
13
21
10 18 2540
33
Localizar el Predecesor
Paso
2
13
18
10 18 2540
33
Copiar el valor del
Predecesor al nodo que
contenía el valor a borrar
Paso
3
13
18
10 18 25 40
33
Desconectar y liberar el
nodo del Predecesor
Paso
4
Eliminar el valor 21
utilizando el Sucesor
Caso: Eliminar Nodo con dos hijos
13
21
10 18 2540
33
Localizar el valor a
borrarPaso
1
13
21
10 18 2540
33
Localizar el Sucesor
Paso
2
13
25
10 18 2540
33
Copiar el valor del
Sucesor al nodo que
contenía el valor a borrar
Paso
3
13
18
10 18 25 40
33
Desconectar y liberar el
nodo del Sucesor
Paso
4
Más ejemplos:
Árboles binarios de búsqueda (ABB)
Definición
Se trata de árboles de orden 2 en los que se cumple que para cada nodo, el valor de la clave de la raíz del subárbol izquierdo es menor que el valor de la clave del nodo y que el valor de la clave raíz del subárbol derecho es mayor que el valor de la clave del nodo.
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 10 -
Árbol binario de búsqueda
Operaciones en ABB
El repertorio de operaciones que se pueden realizar sobre un ABB es parecido al que realizábamos sobre otras estructuras de datos, más alguna otra propia de árboles:
Buscar un elemento. Insertar un elemento. Borrar un elemento. Movimientos a través del árbol:
o Izquierda. o Derecha. o Raiz.
Información: o Comprobar si un árbol está vacío. o Calcular el número de nodos. o Comprobar si el nodo es hoja. o Calcular la altura de un nodo. o Calcular la altura de un árbol.
Buscar un elemento
Partiendo siempre del nodo raíz, el modo de buscar un elemento se define de forma recursiva.
Si el árbol está vacío, terminamos la búsqueda: el elemento no está en el árbol.
Si el valor del nodo raíz es igual que el del elemento que buscamos, terminamos la búsqueda con éxito.
Si el valor del nodo raíz es mayor que el elemento que buscamos, continuaremos la búsqueda en el árbol izquierdo.
Si el valor del nodo raíz es menor que el elemento que buscamos, continuaremos la búsqueda en el árbol derecho.
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 11 -
El valor de retorno de una función de búsqueda en un ABB puede ser un puntero al nodo encontrado, o NULL, si no se ha encontrado.
Insertar un elemento
Para insertar un elemento nos basamos en el algoritmo de búsqueda. Si el elemento está en el árbol no lo insertaremos. Si no lo está, lo insertaremos a continuación del último nodo visitado.
Necesitamos un puntero auxiliar para conservar una referencia al padre del nodo raíz actual. El valor inicial para ese puntero es NULL.
Padre = NULL nodo = Raiz Bucle: mientras actual no sea un árbol vacío o hasta que se encuentre el
elemento. o Si el valor del nodo raíz es mayor que el elemento que buscamos,
continuaremos la búsqueda en el árbol izquierdo: Padre=nodo, nodo=nodo->izquierdo.
o Si el valor del nodo raíz es menor que el elemento que buscamos, continuaremos la búsqueda en el árbol derecho: Padre=nodo, nodo=nodo->derecho.
Si nodo no es NULL, el elemento está en el árbol, por lo tanto salimos. 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. Si el elemento es menor que el Padre, entonces insertamos el nuevo
elemento como un nuevo árbol izquierdo de Padre. Si el elemento es mayor que el Padre, entonces insertamos el nuevo
elemento como un nuevo árbol derecho de Padre.
Este modo de actuar asegura que el árbol sigue siendo ABB.
Borrar un elemento
Para borrar un elemento también nos basamos en el algoritmo de búsqueda. Si el elemento no está en el árbol no lo podremos borrar. Si está, hay dos casos posibles:
1. Se trata de un nodo hoja: en ese caso lo borraremos directamente. 2. Se trata de un nodo rama: en ese caso no podemos eliminarlo, puesto que
perderíamos todos los elementos del árbol de que el nodo actual es padre. En su lugar buscamos el nodo más a la izquierda del subárbol derecho, o el más a la derecha del subárbol izquierdo e intercambiamos sus valores. A continuación eliminamos el nodo hoja.
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 12 -
Necesitamos un puntero auxiliar para conservar una referencia al padre del nodo raíz actual. El valor inicial para ese puntero es NULL.
Padre = NULL Si el árbol está vacío: el elemento no está en el árbol, por lo tanto salimos
sin eliminar ningún elemento. (1) Si el valor del nodo raíz es igual que el del elemento que buscamos,
estamos ante uno de los siguientes casos: o El nodo raíz es un nodo hoja:
Si 'Padre' es NULL, el nodo raíz es el único del árbol, por lo tanto el puntero al árbol debe ser NULL.
Si raíz es la rama derecha de 'Padre', hacemos que esa rama apunte a NULL.
Si raíz es la rama izquierda de 'Padre', hacemos que esa rama apunte a NULL.
Eliminamos el nodo, y salimos. o El nodo no es un nodo hoja:
Buscamos el 'nodo' más a la izquierda del árbol derecho de raíz o el más a la derecha del árbol izquierdo. Hay que tener en cuenta que puede que sólo exista uno de esos árboles. Al mismo tiempo, actualizamos 'Padre' para que apunte al padre de 'nodo'.
Intercambiamos los elementos de los nodos raíz y 'nodo'. Borramos el nodo 'nodo'. Esto significa volver a (1), ya que
puede suceder que 'nodo' no sea un nodo hoja. (Ver ejemplo 3)
Si el valor del nodo raíz es mayor que el elemento que buscamos, continuaremos la búsqueda en el árbol izquierdo.
Si el valor del nodo raíz es menor que el elemento que buscamos, continuaremos la búsqueda en el árbol derecho.
Ejemplo 1: Borrar un nodo hoja
En el árbol de ejemplo, borrar el nodo 3.
1. Localizamos el nodo a borrar, al tiempo que mantenemos un puntero a 'Padre'.
2. Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a NULL.
3. Borramos el 'nodo'.
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 13 -
Borrar un nodo hoja
Ejemplo 2: Borrar un nodo rama con intercambio de un nodo hoja.
En el árbol de ejemplo, borrar el nodo 4.
1. Localizamos el nodo a borrar ('raíz'). 2. Buscamos el nodo más a la derecha del árbol izquierdo de 'raíz', en este
caso el 3, al tiempo que mantenemos un puntero a 'Padre' a 'nodo'. 3. Intercambiamos los elementos 3 y 4. 4. Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a
NULL. 5. Borramos el 'nodo'.
Borrar con intercambio de nodo hoja
Ejemplo 3: Borrar un nodo rama con intercambio de un nodo rama.
Para este ejemplo usaremos otro árbol. En éste borraremos el elemento 6.
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 14 -
Árbol binario de búsqueda
1. Localizamos el nodo a borrar ('raíz'). 2. Buscamos el nodo más a la izquierda del árbol derecho de 'raíz', en este
caso el 12, ya que el árbol derecho no tiene nodos a su izquierda, si optamos por la rama izquierda, estaremos en un caso análogo. Al mismo tiempo que mantenemos un puntero a 'Padre' a 'nodo'.
3. Intercambiamos los elementos 6 y 12. 4. Ahora tenemos que repetir el bucle para el nodo 6 de nuevo, ya que no
podemos eliminarlo.
Borrar con intercambio de nodo rama (1)
5. Localizamos de nuevo el nodo a borrar ('raíz'). 6. Buscamos el nodo más a la izquierda del árbol derecho de 'raíz', en este
caso el 16, al mismo tiempo que mantenemos un puntero a 'Padre' a 'nodo'. 7. Intercambiamos los elementos 6 y 16. 8. Hacemos que el puntero de 'Padre' que apuntaba a 'nodo', ahora apunte a
NULL. 9. Borramos el 'nodo'.
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 15 -
Borrar con intercambio de nodo rama (2)
Este modo de actuar asegura que el árbol sigue siendo ABB.
Más ejemplos:
Observaciones importantes:
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 16 -
Nótese que si en el árbol anterior se sustituye el valor 140 del nodo por 160, 99 por 105 y 43 por 55; el árbol continúa siendo un árbol binario de búsqueda. Ahora bien, si en dicho árbol se remplaza el valor 87 del nodo por 125, entonces el árbol deja de ser un árbol binario de búsqueda puesto que viola el principio que dice que: “Todos los nodos del subárbol izquierdo del nodo T deben ser menores o iguales al nodo T” (en este caso 125 no es menor a 120). También se puede observar que si se efectúa un recorrido inorden sobre un ABB se obtendrá una clasificación de los nodos en forma ascendente. El recorrido inorden del árbol de la figura anterior produce el siguiente resultado:
22-43-56-65-87-93-99-120-130-135-140 INSERCIÓN EN UN ABB La inserción es una operación que se puede realizar eficientemente en un árbol binario de búsqueda. La estructura crece conforme se inserten elementos al árbol. Los pasos que deben realizarse para insertar un elemento a un árbol binario de búsqueda son los siguientes:
1. Debe compararse la clave a insertar con la raíz del árbol. Si es mayor, debe
avanzarse hacia el subárbol derecho. Si es menor, debe avanzarse hacia el
subárbol izquierdo.
2. Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las
siguientes condiciones:
2.1 El subárbol derecho es igual a vacío, o el subárbol izquierdo es igual a vació; en cuyo caso se procederá a insertar el elemento en el lugar que le corresponde. 2.2 La clave que quiere insertarse es igual a la raíz del árbol; en cuyo caso no se realiza la inserción. Supóngase que quieren insertarse las siguientes claves en un árbol binario de búsqueda que se encuentre vacío: Claves: 120-87 - 43-65-140-99- 130-22-56 Los resultados parciales que ilustran cómo funciona el procedimiento se presentan en las figuras que siguen:
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 17 -
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 18 -
BORRADO O ELIMINACIÓN EN UN ABB La operación (le borrado es un poco más complicada que la de inserción. Ésta consiste en eliminar un nodo del árbol sin violar los principios que definen justamente un árbol binario de búsqueda. Se debe distinguir los siguientes casos:
1. Si el elemento a borrar es terminal u hoja, simplemente se suprime.
2. Si el elemento a borrar tiene un solo descendiente, entonces tiene que
sustituirse por ese descendiente.
3. Si el elemento a borrar tiene los dos descendientes, entonces se tiene que
sustituir por el nodo que se encuentra más a la izquierda en el subárbol
derecho o por el nodo que se encuentra más a la derecha en el subárbol
izquierdo.
Además, debemos recordar que antes de eliminar un nodo, debe localizárselo en el árbol. Para esto, se utilizará el algoritmo de búsqueda. Ejemplo:
Supóngase que se desea eliminar las siguientes claves del árbol binario de búsqueda de la figura anterior: claves: 22 - 99 - 87 - 120 - 140 - 135 – 56 Los resultados parciales que ilustran cómo funciona el procedimiento se presentan en las figuras que siguen:
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 19 -
ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE
UAB – Ingeniería de Sistemas - 20 -
top related