arbol de busqueda
TRANSCRIPT
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.
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
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
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.
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.
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.
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.
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.
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.
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.
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.
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.
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
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.
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
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}
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}
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
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
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
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
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