Tema 10. Dinámica y funciones de la Atmosfera 2024
Arbol de busqueda
1.
2. 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.
3. 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 nodoT. de forma
similar, todos los valores de los nodos del subárbol derecho de T deben ser
mayores o iguales al valor del nodo T.
87
120
140
43 99 130
1359322 65
56
4. 87
120
140
43 99 130
1359322 65
56
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:
Recorrido Inorden: 27, 30, 56, 65, 87, 93, 99, 120, 130, 135, 140
5. 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.
6. 87
120
140
43 99 130
1359322 65
56
P C Preguntas y Acciones
1 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^.INFO
entonces
1.1 Si NODO^.IZQ = NULL
entonces
Escribir “El ncdo no se encuentra en el árbol”
si no
Regresar a BÚSQUEDA con N0DO^.IZQ e INFOR
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
Escribir “El nodo no se encuentra en el árbol”
si no
Regresar a BUSQUEDA con NODO^.DER e INFOR
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}
Ejemplo Búsqueda.
7. P C Preguntas y Acciones
1 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 3
4
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^.INFO
entonces
1.1 Si NODO^.IZQ = NULL
entonces
Escribir “El ncdo no se encuentra en el árbol”
si no
Regresar a BÚSQUEDA con N0DO^.IZQ e INFOR
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
Escribir “El nodo no se encuentra en el árbol”
si no
Regresar a BUSQUEDA con NODO^.DER e INFOR
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}
Ejemplo Búsqueda.
8. P C Preguntas y Acciones
1 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 3
4
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^.INFO
entonces
1.1 Si NODO^.IZQ = NULL
entonces
Escribir “El ncdo no se encuentra en el árbol”
si no
Regresar a BÚSQUEDA con N0DO^.IZQ e INFOR
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
Escribir “El nodo no se encuentra en el árbol”
si no
Regresar a BUSQUEDA con NODO^.DER e INFOR
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}
Ejemplo Búsqueda.
9. P C Preguntas y Acciones
1 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 3
4
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^.INFO
entonces
1.1 Si NODO^.IZQ = NULL
entonces
Escribir “El ncdo no se encuentra en el árbol”
si no
Regresar a BÚSQUEDA con N0DO^.IZQ e INFOR
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
Escribir “El nodo no se encuentra en el árbol”
si no
Regresar a BUSQUEDA con NODO^.DER e INFOR
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}
Ejemplo Búsqueda.
10. 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.
11. 87
120
140
43 99 130
1359322 65
56
P C Preguntas y Acciones
1 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 ≠ NULL
entonces
1.1 Si INFOR < NODO^.INFO
entonces
Regresa a BÚSQUEDA1 con NODO^.IZQ e INFOR
si no
1.1.1 Si INFOR > NODO^.INFO
entonces
Regresa a BÚSQUEDA1 con NODO^.DER e INFOR
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}
Ejemplo Búsqueda.
12. 87
120
140
43 99 130
1359322 65
56
P C Preguntas y Acciones
1 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 ≠ NULL
entonces
1.1 Si INFOR < NODO^.INFO
entonces
Regresa a BÚSQUEDA1 con NODO^.IZQ e INFOR
si no
1.1.1 Si INFOR > NODO^.INFO
entonces
Regresa a BÚSQUEDA1 con NODO^.DER e INFOR
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}
Ejemplo Búsqueda.
13. P C Preguntas y Acciones
1 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 ≠ NULL
entonces
1.1 Si INFOR < NODO^.INFO
entonces
Regresa a BÚSQUEDA1 con NODO^.IZQ e INFOR
si no
1.1.1 Si INFOR > NODO^.INFO
entonces
Regresa a BÚSQUEDA1 con NODO^.DER e INFOR
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}
Ejemplo Búsqueda.
14. 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.
Inserción
15. 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.
16. 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
17. 99
120
87
43
65
140
130
22
56
P C Preguntas y Acciones
1 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
entonces
1.1 Si NODO^.IZQ = NIL
entonces
CREA (OTRO) {Crear un nuevo nodo}
Hacer OTRO^.IZQNIL, OTRO^.DERNIL, 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 =NIL
entonces
CREA (OTRO) {Crear un nuevo nodo}
Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR y
NODO^.DEROTRO
si no
Regresar a INSERCIÓN con NODO^.DER e INFOR {Llamada recusiva}
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}
18. 99
120
87
43
65
140
130
22
56
P C Preguntas y Acciones
1 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
entonces
1.1 Si NODO^.IZQ = NIL
entonces
CREA (OTRO) {Crear un nuevo nodo}
Hacer OTRO^.IZQNIL, OTRO^.DERNIL, 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 =NIL
entonces
CREA (OTRO) {Crear un nuevo nodo}
Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR y
NODO^.DEROTRO
si no
Regresar a INSERCIÓN con NODO^.DER e INFOR {Llamada recusiva}
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}
19. P C Preguntas y Acciones
1 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
entonces
1.1 Si NODO^.IZQ = NIL
entonces
CREA (OTRO) {Crear un nuevo nodo}
Hacer OTRO^.IZQNIL, OTRO^.DERNIL, 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 =NIL
entonces
CREA (OTRO) {Crear un nuevo nodo}
Hacer OTRO^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR y
NODO^.DEROTRO
si no
Regresar a INSERCIÓN con NODO^.DER e INFOR {Llamada recusiva}
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}
99
120
87
43
65
140
130
22
56 93
20. 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
21. 99
120
87
43
65
140
130
22
56 93INSERCIÓN1 (NODO INFOR)
1. Si NODO ≠ NIL
entonces
1.1 Si INFOR < NODO^.INFO
entonces
Regresar a INSERCIÓN1 con NODO^.IZQ e INFOR
si no
1.1.1 Si INFOR > NODO^.INFO
entonces
Regresar a INSERCIÓN1 con NODO^.DER e INFOR
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^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR y
NODOOTRO
2. { Fin del condicional del paso 1}
P C Preguntas y Acciones
1 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
22. 99
120
87
43
65
140
130
22
56 93INSERCIÓN1 (NODO INFOR)
1. Si NODO ≠ NIL
entonces
1.1 Si INFOR < NODO^.INFO
entonces
Regresar a INSERCIÓN1 con NODO^.IZQ e INFOR
si no
1.1.1 Si INFOR > NODO^.INFO
entonces
Regresar a INSERCIÓN1 con NODO^.DER e INFOR
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^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR y
NODOOTRO
2. { Fin del condicional del paso 1}
P C Preguntas y Acciones
1 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
23. 99
120
87
43
65
140
130
22
56 93INSERCIÓN1 (NODO INFOR)
1. Si NODO ≠ NIL
entonces
1.1 Si INFOR < NODO^.INFO
entonces
Regresar a INSERCIÓN1 con NODO^.IZQ e INFOR
si no
1.1.1 Si INFOR > NODO^.INFO
entonces
Regresar a INSERCIÓN1 con NODO^.DER e INFOR
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^.IZQNIL, OTRO^.DERNIL, OTRO^.INFOINFOR y
NODOOTRO
2. { Fin del condicional del paso 1}
P C Preguntas y Acciones
1 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 6
7
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