arbol de busqueda

23

Upload: gina-paola-montiel

Post on 11-Jul-2015

171 views

Category:

Education


2 download

TRANSCRIPT

Page 1: Arbol de busqueda
Page 2: Arbol de busqueda

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

En las listas, las operaciones de inserción y eliminación sepueden llevar a cabo con facilidad, sin embargo la búsquedaes una operación bastante costosa que incluso nos puedellevar a recorrer todos los elementos de ella para localizaruno en particular.

Page 3: Arbol de busqueda

Para todo nodo T del árbol debe cumplirse que todos los valores de los nodos Del sub árbol izquierdo serán menores o iguales al valor del nodo T. de formasimilar, todos los valores de los nodos del subárbol derecho de T deben sermayores o iguales al valor del nodo T.

87

120

140

43 99 130

1359322 65

56

Page 4: Arbol de busqueda

87

120

140

43 99 130

1359322 65

56

También es posible observar que si se efectúa un recorrido Inorden sobreun árbol de búsqueda se obtendrá una clasificación de los nodos enforma ascendente. El recorrido Inorden del árbol de la figura anteriorproduce el siguiente resultado:Recorrido Inorden: 27, 30, 56, 65, 87, 93, 99, 120, 130, 135, 140

Page 5: Arbol de busqueda

87

120

140

43 99 130

1359322 65

56

P C Preguntas y Acciones

Ejemplo.Suponga que se desea localizar la clave 93 en el árbol binario de búsqueda, donde se representas los pasos (P) uno a uno y el numero de comparaciones (C) y preguntas Y acciones necesarias para localizar la clave 93.

Ejemplo Búsqueda.

Page 6: Arbol de busqueda

87

120

140

43 99 130

1359322 65

56

P C Preguntas y Acciones1 1

2

¿Es 93 < 120?Sí ¿Es el subárbol izquierdo de 120 (87)=null?No. Entonces regresamos a BUSQUEDA con el subárbol izquierdo de 120 (87) e INFOR

BÚSQUEDA (NODO, INFOR )

1. Si INFOR < NODO^.INFOentonces

1.1 Si NODO^.IZQ = NULLentoncesEscribir “El ncdo no se encuentra en el árbol”si noRegresar a BÚSQUEDA con N0DO^.IZQ e INFOR

1.2 { Fin del condicional del paso 1.1}si no1.3 Si INFOR> NODO^.INFO

entonces1.3.1 Si NODO^.DER = NULL

entoncesEscribir “El nodo no se encuentra en el árbol”si noRegresar a BUSQUEDA con NODO^.DER e INFOR

1.3.2 (Fin del condicional del paso 1.3.1si 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}Ejemplo Búsqueda.

Page 7: Arbol de busqueda

P C Preguntas y Acciones1 1

2

¿Es 93 < 120?Sí ¿Es el subárbol izquierdo de 120 (87)=null?No. Entonces regresamos a BUSQUEDA con el subárbol izquierdo de 120 (87) e INFOR

2 34

5

¿Es 93 < 87?No. ¿Es 93 > 87?

Sí ¿Es el subárbol derecho de 87 (99)=null?No. Entonces regresamos a BUSQUEDA con el subárbol derecho de 87 (99) e INFOR

87

120

140

43 99 130

1359322 65

56

BÚSQUEDA (NODO, INFOR )

1. Si INFOR < NODO^.INFOentonces

1.1 Si NODO^.IZQ = NULLentoncesEscribir “El ncdo no se encuentra en el árbol”si noRegresar a BÚSQUEDA con N0DO^.IZQ e INFOR

1.2 { Fin del condicional del paso 1.1}si no1.3 Si INFOR> NODO^.INFO

entonces1.3.1 Si NODO^.DER = NULL

entoncesEscribir “El nodo no se encuentra en el árbol”si noRegresar a BUSQUEDA con NODO^.DER e INFOR

1.3.2 (Fin del condicional del paso 1.3.1si 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}Ejemplo Búsqueda.

Page 8: Arbol de busqueda

P C Preguntas y Acciones1 1

2

¿Es 93 < 120?Sí ¿Es el subárbol izquierdo de 120 (87)=null?No. Entonces regresamos a BUSQUEDA con el subárbol izquierdo de 120 (87) e INFOR

2 34

5

¿Es 93 < 87?No. ¿Es 93 > 87?

Sí ¿Es el subárbol derecho de 87 (99)=null?No. Entonces regresamos a BUSQUEDA con el subárbol derecho de 87 (99) e INFOR

3 6

7

¿Es 93 < 99?Sí ¿Es el subárbol izquierdo de 99(93)=null?

No. Entonces se regresa a BÚSQUEDA con el subárbol izquierdo de 99 (93) e INFOR

87

120

140

43 99 130

1359322 65

56

BÚSQUEDA (NODO, INFOR )

1. Si INFOR < NODO^.INFOentonces

1.1 Si NODO^.IZQ = NULLentoncesEscribir “El ncdo no se encuentra en el árbol”si noRegresar a BÚSQUEDA con N0DO^.IZQ e INFOR

1.2 { Fin del condicional del paso 1.1}si no1.3 Si INFOR> NODO^.INFO

entonces1.3.1 Si NODO^.DER = NULL

entoncesEscribir “El nodo no se encuentra en el árbol”si noRegresar a BUSQUEDA con NODO^.DER e INFOR

1.3.2 (Fin del condicional del paso 1.3.1si 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}Ejemplo Búsqueda.

Page 9: Arbol de busqueda

P C Preguntas y Acciones1 1

2

¿Es 93 < 120?Sí ¿Es el subárbol izquierdo de 120 (87)=null?No. Entonces regresamos a BUSQUEDA con el subárbol izquierdo de 120 (87) e INFOR

2 34

5

¿Es 93 < 87?No. ¿Es 93 > 87?

Sí ¿Es el subárbol derecho de 87 (99)=null?No. Entonces regresamos a BUSQUEDA con el subárbol derecho de 87 (99) e INFOR

3 6

7

¿Es 93 < 99?Sí ¿Es el subárbol izquierdo de 99(93)=null?

No. Entonces se regresa a BÚSQUEDA con el subárbol izquierdo de 99 (93) e INFOR

4 8

9

¿Es 93 < 93?

No. ¿Es 93 > 99?No. Entonces Éxito “Clave 93 encontrada”

87

120

140

43 99 130

1359322 65

56

BÚSQUEDA (NODO, INFOR )

1. Si INFOR < NODO^.INFOentonces

1.1 Si NODO^.IZQ = NULLentoncesEscribir “El ncdo no se encuentra en el árbol”si noRegresar a BÚSQUEDA con N0DO^.IZQ e INFOR

1.2 { Fin del condicional del paso 1.1}si no1.3 Si INFOR> NODO^.INFO

entonces1.3.1 Si NODO^.DER = NULL

entoncesEscribir “El nodo no se encuentra en el árbol”si noRegresar a BUSQUEDA con NODO^.DER e INFOR

1.3.2 (Fin del condicional del paso 1.3.1si 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}Ejemplo Búsqueda.

Page 10: Arbol de busqueda

87

120

140

43 99 130

1359322 65

56

Ejemplo 2.Suponga que se desea localizar la clave 123 en el árbol binario de búsqueda, donde se representas los pasos (P) uno a uno y el numero de comparaciones (C) y preguntas Y acciones necesarias para localizar la clave 123.

P C Preguntas y Acciones

Ejemplo Búsqueda.

Page 11: Arbol de busqueda

87

120

140

43 99 130

1359322 65

56

P C Preguntas y Acciones1 1

2

3

¿Es 123 < 120?

No. ¿Es 123 > 120?Si. ¿Es el subárbol derecho de 120 (140)=null?

No. Entonces regresamos a BUSQUEDA con el subárbol derecho de 120 (140) e INFOR

BUSQUEDA2 (NODO, INFOR)

1. Si NODO ≠ NULLentonces

1.1 Si INFOR < NODO^.INFOentonces

Regresa a BÚSQUEDA1 con NODO^.IZQ e INFORsi no

1.1.1 Si INFOR > NODO^.INFOentoncesRegresa a BÚSQUEDA1 con NODO^.DER e INFORsi noEscribir “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 noEscribir “El nodo no se encuentra en el árbol”

2. {Fin del condicional del paso 1}

Ejemplo Búsqueda.

Page 12: Arbol de busqueda

87

120

140

43 99 130

1359322 65

56

P C Preguntas y Acciones1 1

2

3

¿Es 123 < 120?

No. ¿Es 123 > 120?Si. ¿Es el subárbol derecho de 120 (140)=null?

No. Entonces regresamos a BUSQUEDA con el subárbol derecho de 120 (140) e INFOR

2 4

5

¿Es 123 < 140?Si. ¿Es el subárbol derecho de 140 (130)=null?

No. Entonces regresamos a BUSQUEDA con el subárbol izquierdo de 140 (130) e INFOR

BUSQUEDA2 (NODO, INFOR)

1. Si NODO ≠ NULLentonces

1.1 Si INFOR < NODO^.INFOentonces

Regresa a BÚSQUEDA1 con NODO^.IZQ e INFORsi no

1.1.1 Si INFOR > NODO^.INFOentoncesRegresa a BÚSQUEDA1 con NODO^.DER e INFORsi noEscribir “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 noEscribir “El nodo no se encuentra en el árbol”

2. {Fin del condicional del paso 1}

Ejemplo Búsqueda.

Page 13: Arbol de busqueda

P C Preguntas y Acciones1 1

2

3

¿Es 123 < 120?

No. ¿Es 123 > 120?Si. ¿Es el subárbol derecho de 120 (140)=null?

No. Entonces regresamos a BUSQUEDA con el subárbol derecho de 120 (140) e INFOR

2 4

5

¿Es 123 < 140?Si. ¿Es el subárbol derecho de 140 (130)=null?

No. Entonces regresamos a BUSQUEDA con el subárbol izquierdo de 140 (130) e INFOR

3 6

7

¿Es 123 < 130?Sí ¿Es el subárbol izquierdo de 130(null)=null?

Si. Entonces FRACASO “El nodo no se encuentra en el árbol”

87

120

140

43 99 130

1359322 65

56

BUSQUEDA2 (NODO, INFOR)

1. Si NODO ≠ NULLentonces

1.1 Si INFOR < NODO^.INFOentonces

Regresa a BÚSQUEDA1 con NODO^.IZQ e INFORsi no

1.1.1 Si INFOR > NODO^.INFOentoncesRegresa a BÚSQUEDA1 con NODO^.DER e INFORsi noEscribir “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 noEscribir “El nodo no se encuentra en el árbol”

2. {Fin del condicional del paso 1}

Ejemplo Búsqueda.

Page 14: Arbol de busqueda

La inserción es una operación que se puede realizar eficientemente en un árbolbinario 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 debúsqueda son los siguientes:

1)Debe compararse la clave a insertar con la raíz del árbol. Si es mayor, debeavanzarse hacia el subárbol derecho. Si es menor, debe avanzarse hacia el subárbolizquierdo.

2) Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las siguientescondiciones:

2.1 El subárbol derecho es igual a vacío, o el subárbol izquierdo es igual a vació; encuyo 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 realizala inserción.

Inserción

Page 15: Arbol de busqueda

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

120 120

87

120

87

43

120

87

43

65

120

87

43

65

140

120

87

43

65

140

99

99

120

87

43

65

140

130 99

120

87

43

65

140

130

22

99

120

87

43

65

140

130

22

56

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

Page 16: Arbol de busqueda

Ejemplo 3.Suponga que se desea insertar la clave 93 en el árbol binario de búsqueda, donde se representas los pasos (P) uno a uno y el numero de comparaciones (C) y preguntas Y acciones necesarias para insertar la clave 93 y mostrar el árbol al final de la inserción.

99

120

87

43

65

140

130

22

56

P C Preguntas y Acciones

Page 17: Arbol de busqueda

99

120

87

43

65

140

130

22

56

P C Preguntas y Acciones1 1

2

¿Es 93 < 120?Si.Si. ¿Es el subárbol izquierdo de 120 (87)=null?

No. Entonces regresara INSERCION con el subárbol izquierdo de 120 (87) e INFOR

INSERCIÓN (NODO, INFOR)1. Si INFOR < NODO^.INFO

entonces1.1 Si NODO^.IZQ = NIL

entoncesCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR yNODO^.IZQOTROsi noRegresar 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^.INFOentonces1.3.1 Si NODO^.DER =NIL

entoncesCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR yNODO^.DEROTROsi noRegresar a INSERCIÓN con NODO^.DER e INFOR {Llamada recusiva}

1.3.2 {Fin del condicional del paso 1.3.1}si noEscribir “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: Arbol de busqueda

99

120

87

43

65

140

130

22

56

P C Preguntas y Acciones1 1

2

¿Es 93 < 120?Si.Si. ¿Es el subárbol izquierdo de 120 (87)=null?

No. Entonces regresara INSERCION con el subárbol izquierdo de 120 (87) e INFOR

2 3

4

5

¿Es 93 < 87?No. ¿Es 93 > 87?Si. ¿Es el subárbol derecho de 87(99)=null?

No. Entonces regresara INSERCION con el subárbol derecho 87 (99) e INFOR

INSERCIÓN (NODO, INFOR)1. Si INFOR < NODO^.INFO

entonces1.1 Si NODO^.IZQ = NIL

entoncesCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR yNODO^.IZQOTROsi noRegresar 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^.INFOentonces1.3.1 Si NODO^.DER =NIL

entoncesCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR yNODO^.DEROTROsi noRegresar a INSERCIÓN con NODO^.DER e INFOR {Llamada recusiva}

1.3.2 {Fin del condicional del paso 1.3.1}si noEscribir “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 19: Arbol de busqueda

P C Preguntas y Acciones1 1

2

¿Es 93 < 120?Si.Si. ¿Es el subárbol izquierdo de 120 (87)=null?

No. Entonces regresara INSERCION con el subárbol izquierdo de 120 (87) e INFOR

2 3

4

5

¿Es 93 < 87?No. ¿Es 93 > 87?Si. ¿Es el subárbol derecho de 87(99)=null?

No. Entonces regresara INSERCION con el subárbol derecho 87 (99) e INFOR

3 6

7

¿Es 93 < 99?Sí ¿Es el subárbol izquierdo de 99(null)=null?

Sí. Entonces crear otro nodo, realizar los enlaces y cargar la información

INSERCIÓN (NODO, INFOR)1. Si INFOR < NODO^.INFO

entonces1.1 Si NODO^.IZQ = NIL

entoncesCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR yNODO^.IZQOTROsi noRegresar 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^.INFOentonces1.3.1 Si NODO^.DER =NIL

entoncesCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR yNODO^.DEROTROsi noRegresar a INSERCIÓN con NODO^.DER e INFOR {Llamada recusiva}

1.3.2 {Fin del condicional del paso 1.3.1}si noEscribir “El nodo ya se encuentran en el árbol”

1.4 {Fin del condicional del paso 1.3}2. {Fin del condicional del paso 1}

99

120

87

43

65

140

130

22

56 93

Page 20: Arbol de busqueda

Ejemplo 3.Suponga que se desea insertar la clave 135 en el árbol binario de búsqueda, donde se representas los pasos (P) uno a uno y el numero de comparaciones (C) y preguntas Y acciones necesarias para insertar la clave 135 y mostrar el árbol al final de la inserción.

P C Preguntas y Acciones

99

120

87

43

65

140

130

22

56 93

Page 21: Arbol de busqueda

99

120

87

43

65

140

130

22

56 93INSERCIÓN1 (NODO INFOR)

1. Si NODO ≠ NILentonces1.1 Si INFOR < NODO^.INFO

entoncesRegresar a INSERCIÓN1 con NODO^.IZQ e INFORsi no1.1.1 Si INFOR > NODO^.INFO

entoncesRegresar a INSERCIÓN1 con NODO^.DER e INFOR

si noEscribir “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 noCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR yNODOOTRO

2. { Fin del condicional del paso 1}

P C Preguntas y Acciones1 1

2

¿Es 135 < 120?No. ¿Es 135 > 120?Si. ¿Es el subárbol derecho de 120 (140)=null?

No. Entonces regresara INSERCION con el subárbol derecho de 120 (140) e INFOR

Page 22: Arbol de busqueda

99

120

87

43

65

140

130

22

56 93INSERCIÓN1 (NODO INFOR)

1. Si NODO ≠ NILentonces1.1 Si INFOR < NODO^.INFO

entoncesRegresar a INSERCIÓN1 con NODO^.IZQ e INFORsi no1.1.1 Si INFOR > NODO^.INFO

entoncesRegresar a INSERCIÓN1 con NODO^.DER e INFOR

si noEscribir “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 noCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR yNODOOTRO

2. { Fin del condicional del paso 1}

P C Preguntas y Acciones1 1

2

¿Es 135 < 120?No. ¿Es 135 > 120?Si. ¿Es el subárbol derecho de 120 (140)=null?

No. Entonces regresara INSERCION con el subárbol derecho de 120 (140) e INFOR

2 3

4

5

¿Es 135 < 140?Sí ¿Es el subárbol izquierdo de 140(130)=null?Si. ¿Es el subárbol derecho de 87(99)=null?

No. Entonces regresara INSERCION con el subárbol izquierdo 140 (130) e INFOR

Page 23: Arbol de busqueda

99

120

87

43

65

140

130

22

56 93INSERCIÓN1 (NODO INFOR)

1. Si NODO ≠ NILentonces1.1 Si INFOR < NODO^.INFO

entoncesRegresar a INSERCIÓN1 con NODO^.IZQ e INFORsi no1.1.1 Si INFOR > NODO^.INFO

entoncesRegresar a INSERCIÓN1 con NODO^.DER e INFOR

si noEscribir “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 noCREA (OTRO) {Crear un nuevo nodo}Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR yNODOOTRO

2. { Fin del condicional del paso 1}

P C Preguntas y Acciones1 1

2

¿Es 135 < 120?No. ¿Es 135 > 120?Si. ¿Es el subárbol derecho de 120 (140)=null?

No. Entonces regresara INSERCION con el subárbol derecho de 120 (140) e INFOR

2 3

4

5

¿Es 135 < 140?Sí ¿Es el subárbol izquierdo de 140(130)=null?Si. ¿Es el subárbol derecho de 87(99)=null?

No. Entonces regresara INSERCION con el subárbol izquierdo 140 (130) e INFOR

3 67

8

¿Es 135 < 130?No. ¿Es 135 > 120?Si. ¿Es el subárbol derecho de 130(null)=null?

No. Entonces crear otro nodo, realizar los enlaces y cargar la información

135