estructuras de datos · los árboles binarios de búsqueda son estructuras de datos que presentan...

21
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,

Upload: others

Post on 30-Jul-2020

9 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

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,

Page 2: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

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

Page 3: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 3 -

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:

Page 4: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 4 -

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

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.

Page 5: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 5 -

Á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.

Ejemplos de ABB…

13

21

5 18

15

25

40

36

3321

30

32

43

41

33

Page 6: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 6 -

¿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

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.

Page 7: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 7 -

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

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.

Page 8: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 8 -

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

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).

Page 9: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 9 -

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

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

Page 10: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 10 -

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.

Á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:

Page 11: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 11 -

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.

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.

Page 12: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 12 -

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.

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

Page 13: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 13 -

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'.

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'.

Page 14: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 14 -

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.

Á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)

Page 15: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 15 -

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'.

Borrar con intercambio de nodo rama (2)

Este modo de actuar asegura que el árbol sigue siendo ABB.

Más ejemplos:

Observaciones importantes:

Page 16: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

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

Page 17: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 17 -

Los resultados parciales que ilustran cómo funciona el procedimiento se presentan en las figuras que siguen:

Page 18: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

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:

Page 19: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 19 -

Page 20: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 20 -

Page 21: Estructuras de datos · Los árboles binarios de búsqueda son estructuras de datos que presentan un gran rendimiento cuando las funciones a realizar implican búsquedas, inserciones

ASIGNATURA: (TIS-106) Estructuras de Datos II DOCENTE: Ing. Freddy Melgar Algarañaz 6to. SEMESTRE

UAB – Ingeniería de Sistemas - 21 -