Árboles Binarios de Búsqueda (ABB)

38
Estructura de Datos II Árboles Binarios de Búsqueda (ABB) ABB = Árbol binario ordenado según uno o más criterios Cada nodo tiene dos hijos: el subárbol izquierdo es el árbol vacío o es un subárbol que contiene nodos cuya clave es menor que la suya el subárbol izquierdo es el árbol vacío o es un subárbol que contiene nodos cuya clave es mayor que la suya ¿Cuál de estos dos árboles binarios de enteros es un ABB? 7 4 8 9 7 4 8 9

description

Árboles Binarios de Búsqueda (ABB). ABB = Árbol binario ordenado según uno o más criterios Cada nodo tiene dos hijos: el subárbol izquierdo es el árbol vacío o es un subárbol que contiene nodos cuya clave es menor que la suya - PowerPoint PPT Presentation

Transcript of Árboles Binarios de Búsqueda (ABB)

Page 1: Árboles Binarios de Búsqueda (ABB)

Estructura de Datos II

Árboles Binarios de Búsqueda (ABB)

• ABB = Árbol binario ordenado según uno o más criterios

• Cada nodo tiene dos hijos:– el subárbol izquierdo es el árbol vacío o es un subárbol que contiene nodos

cuya clave es menor que la suya– el subárbol izquierdo es el árbol vacío o es un subárbol que contiene nodos

cuya clave es mayor que la suya

• ¿Cuál de estos dos árboles binarios de enteros es un ABB?7

4

8

9

7

4

8

9

Page 2: Árboles Binarios de Búsqueda (ABB)

TAD ABB: inserción

• Los nodos se insertan siempre como nodos hoja

• El algoritmo de inserción garantiza para cada nodo del árbol que:- Su subárbol izquierdo contiene claves menores- Su subárbol derecho contiene claves mayores

• Funcionamiento: - Si el árbol estuviera vacío, se inserta el nodo en la raíz .- Si no, se va recorriendo el árbol:

• En cada nodo se decide si hay que insertar a la derecha o la izquierda.• Si el subárbol en que hay que insertar es vacío, se inserta el nuevo elemento.• Si el subárbol en que hay que insertar no es vacío hay que recorrerlo hasta encontrar el lugar que le corresponde al nodo en ese subárbol.

- Es un algoritmo recursivo.

Page 3: Árboles Binarios de Búsqueda (ABB)

Estructura de Datos II

TAD ABB: Ejemplo de inserción• Insertar 8, 5, 1, 20, 12, 6, 4

8 Insertar 8

4 Insertar 4

6

Insertar 6

5

Insertar 5

1

Insertar 120

Insertar 2012

Insertar 12

Page 4: Árboles Binarios de Búsqueda (ABB)

Estructura de Datos II

TAD ABB: Ejemplo de borrado• Borrar 8

Sustituir por 6 Sustituir por 12

Page 5: Árboles Binarios de Búsqueda (ABB)

Estructura de Datos II

TAD ABB: Ejemplo de borrado

Borrar 1 Borrar 20 Borrar 5

• Borrar 1• Borrar 20• Borrar 5

Page 6: Árboles Binarios de Búsqueda (ABB)

ÁRBOLES BINARIOS DE BUSQUEDA

El árbol binario de búsqueda es una estructura sobre la cual se pueden realizar eficientemente las operaciones de búsqueda, inserción y eliminación.

En las listas, las operaciones de inserción y eliminación se pueden llevar a cabo con facilidad, sin embargo la búsqueda es una operación bastante costosa que incluso nos puede llevar a recorrer todos los elementos de ella para localizar uno en particular.

Page 7: Árboles Binarios de Búsqueda (ABB)

Definición de Árbol binario de Búsqueda

Para todo nodo T del árbol debe cumplirse que todos los valores de los nodos del subárbol izquierdo de T deben ser menores al valor del nodo T. De forma similar, todos los valores de los nodos del subárbol derecho de T deben ser mayores al valor del nodo T. Es aquel en el que el hijo de la izquierda (si existe) de cualquier nodo contiene un valor más pequeño que el nodo padre, y el hijo de la derecha (si existe) contiene un valor más grande que el nodo padre.

Page 8: Árboles Binarios de Búsqueda (ABB)

En la siguiente figura tenemos un ejemplo de árbol binario de búsqueda.

Page 9: Árboles Binarios de Búsqueda (ABB)

Observe que si en dicho árbol 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).

Page 10: Árboles Binarios de Búsqueda (ABB)

También es posible observar que si se efectúa un recorrido inorden sobre un árbol de búsqueda 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

Page 11: Árboles Binarios de Búsqueda (ABB)

Algoritmo de Búsqueda en un ABB

BÚSQUEDA (NODO, INFOR )1. Si INFOR < NODO^.INFO entonces

1.1 Si NODO^.IZQ = NULLentonces

Escribir “El ncdo no se encuentra en el árbol”si no

Regresar a BÚSQUEDA con N0DO^.IZQ e INFOR {Llamada recursiva}1.2 { Fin del condicional del paso 1.1}

si no1.3 Si INFOR> NODO^.INFO

entonces1.3.1 Si NODO^.DER = NULL entonces

Escribir “El nodo no se encuentra en el árbol” si no

Regresar a BUSQUEDA con NODO^.DER e INFOR { Llamada recursiva)

1.3.2 (Fin del condicional del paso 1.3.1 si no

Escribir “El nodo se encuentra en el árbol”1.4 { Fin del condicional del paso 1.3}

2. { Fin del condicional del paso 1}

Page 12: Árboles Binarios de Búsqueda (ABB)

BUSQUEDA1 (NODO, INFOR)

1. Si NODO ≠ NULL entonces

1.1 Si INFOR < NODO^.INFO entonces Regresa a BÚSQUEDA1 con NODO^.IZQ e INFOR {Llamada recursiva} si no

1.1.1 Si INFOR > NODO^.INFOentonces Regresa a BÚSQUEDA1 con NODO^.DER e INFOR {Llamada recursiva}si no Escribir “El nodo se encuentra en el árbol”

1.1.2 {Fin del condicional del paso 1.1.1} 1.2 {Fin del condicional del paso 1.1} si no

Escribir “El nodo no se encuentra en el árbol”2. {Fin del condicional del paso 1}

Page 13: Árboles Binarios de Búsqueda (ABB)

INSERCIÓN EN UN ÁRBOL BINARIO DE BÚSQUEDA

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.

Page 14: Árboles Binarios de Búsqueda (ABB)

Ejemplo

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:

Page 15: Árboles Binarios de Búsqueda (ABB)

Inserción : clave 120 clave 87 clave 43 clave 65

Inserción: Clave 140 Clave 99 Clave 130

Page 16: Árboles Binarios de Búsqueda (ABB)

Inserción: Clave 22 Clave 56

Nota: Las líneas gruesas indican el elemento que acaba de insertarse.

Page 17: Árboles Binarios de Búsqueda (ABB)

Inserción en un Árbol Binario de BúsquedaINSERCIÓN (NODO, INFOR)1. Si INFOR < NODO^.INFO entonces 1.1 Si NODO^.IZQ = NULL

entonces CREA (OTRO) {Crear un nuevo nodo} Hacer OTRO^.IZQNULL, OTRO^.DERNULL, OTRO^.INFOINFOR y NODO^.IZQOTRO si no Regresar a INSERCIÓN con NODO^.IZQ e INFOR {Llamada recursiva}

1.2 {Fin del condicional del paso 1.1} si no 1.3 Si INFOR > NODO^.INFO entonces 1.3.1 Si NODO^.DER =NULL

entonces CREA (OTRO) {Crear un nuevo nodo} Hacer OTRO^.IZQNULL, OTRO^.DERNULL, OTRO^.INFOINFOR y NODO^.DEROTRO si no Regresar a INSERCIÓN con NODO^.DER e INFOR {Llamada recursiva}

1.3.2 {Fin del condicional del paso 1.3.1} si no Escribir “El nodo ya se encuentran en el árbol” 1.4 {Fin del condicional del paso 1.3}2. {Fin del condicional del paso 1}

Page 18: Árboles Binarios de Búsqueda (ABB)

INSERCIÓN1 (NODO INFOR)

1. Si NODO ≠ NULL entonces 1.1 Si INFOR < NODO^.INFO entonces Regresar a INSERCIÓN1 con NODO^.IZQ e INFOR {Llamada recursiva} si no 1.1.1 Si INFOR > NODO^.INFO

entonces Regresar a INSERCIÓN1 con NODO^.DER e INFOR {Llamada recursiva} si no Escribir “El nodo ya se encuentra en el árbol”

1.1.2 {Fin del condicional del paso 1,1.1 } 1.2 { Fin del condicional del paso 1.1} si no CREA (OTRO) {Crear un nuevo nodo} Hacer OTRO^.IZQNULL, OTRO^.DERNULL, OTRO^.INFOINFOR y NODOOTRO2. { Fin del condicional del paso 1}

Page 19: Árboles Binarios de Búsqueda (ABB)

BORRADO EN UN ÁRBOL BINARIO DE BÚSQUEDA

La operación de 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ársele en el árbol. Para esto, se utilizará el algoritmo de búsqueda.

Page 20: Árboles Binarios de Búsqueda (ABB)

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 – 56Los resultados parciales que ilustran cómo funciona

el procedimiento se presentan en las figuras que siguen:

Page 21: Árboles Binarios de Búsqueda (ABB)

Nota: Las flechas indican el elemento que quiere eliminarse.

a) y f) corresponden al primer caso

ELIMINACIÓN: CLAVE 22 ELIMINACIÓN: CLAVE 99

a) b)

Page 22: Árboles Binarios de Búsqueda (ABB)

ELIMINACIÓN: CLAVE 87ELIMINACIÓN: CLAVE 87

d)c)

Eliminación en un árbol binario de búsqueda.

b) y c) corresponden al segundo caso; c) y d) corresponden al tercer caso.

g) Estado final del árbol.

Page 23: Árboles Binarios de Búsqueda (ABB)

ELIMINACIÓN: CLAVE 140

ELIMINACIÓN: CLAVE 135 - 56

f) g)

e)

Page 24: Árboles Binarios de Búsqueda (ABB)

Eliminación en un Árbol Binario de BúsquedaELIMINACIÓN (NODO, INFOR)1. Si NODO ≠ NULL entonces 1.1 Si INFOR < NODO^.INFO entonces Regresar a ELIMINACIÓN con NODO^.IZQ e INFOR {Llamada recursiva} si no 1.1.1 Si INFOR > NODO^.INFO entonces Regresar a ELIMINACION con NODO^.DER e INFOR {Llamada recursiva } si no Hacer OTRONODO 1.1.1.A Si OTRO^.DER = NULL entonces Hacer NODOOTRO^.IZQ si no 1.1.1.B SÍ OTRO^.IZQ = NULL

entonces Hacer NODOOTRO^.DER si no Hacer AUXOTRO^.IZQ y AUX1AUX 1.1.1.C Repetir mientras AUX^.DER ≠ NULL Hacer AUX1AUX y AUXAUX^.DER 1.1.2.C {Fin del ciclo del paso 1.1.1.C} Hacer OTRO^.INFO AUX^.INFO, OTROAUX y AUX1^.DERAUX^.IZQ

1.1.2.B {Fin del condicional del paso 1.1.1.B} 1.1.2.A {Fin del condicional del paso 1.1.1.A}

1.1.2 {Fin del condicional del paso 1.1.1} 1.2 {Fin del condicional del paso 1.1} QUITA (OTRO) {Libera la memoria del nodo) si no Escribir “El nodo no se encuentra en el árbol”2. {Fin del condicional del paso 1}

Page 25: Árboles Binarios de Búsqueda (ABB)
Page 26: Árboles Binarios de Búsqueda (ABB)
Page 27: Árboles Binarios de Búsqueda (ABB)
Page 28: Árboles Binarios de Búsqueda (ABB)
Page 29: Árboles Binarios de Búsqueda (ABB)
Page 30: Árboles Binarios de Búsqueda (ABB)
Page 31: Árboles Binarios de Búsqueda (ABB)
Page 32: Árboles Binarios de Búsqueda (ABB)
Page 33: Árboles Binarios de Búsqueda (ABB)
Page 34: Árboles Binarios de Búsqueda (ABB)
Page 35: Árboles Binarios de Búsqueda (ABB)
Page 36: Árboles Binarios de Búsqueda (ABB)
Page 37: Árboles Binarios de Búsqueda (ABB)
Page 38: Árboles Binarios de Búsqueda (ABB)