0% encontró este documento útil (0 votos)
40 vistas22 páginas

11 Abb

Este documento presenta información sobre árboles binarios de búsqueda (ABB), incluyendo su estructura, operaciones como búsqueda, inserción y eliminación de nodos, y formas de recorrerlos en pre-orden, in-orden y post-orden. Explica cómo mantener el orden al insertar nuevos nodos y los casos a considerar al eliminar nodos, dependiendo de si tienen 0, 1 o 2 hijos. También incluye ejemplos y preguntas sobre ABB.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
0% encontró este documento útil (0 votos)
40 vistas22 páginas

11 Abb

Este documento presenta información sobre árboles binarios de búsqueda (ABB), incluyendo su estructura, operaciones como búsqueda, inserción y eliminación de nodos, y formas de recorrerlos en pre-orden, in-orden y post-orden. Explica cómo mantener el orden al insertar nuevos nodos y los casos a considerar al eliminar nodos, dependiendo de si tienen 0, 1 o 2 hijos. También incluye ejemplos y preguntas sobre ABB.
Derechos de autor
© © All Rights Reserved
Nos tomamos en serio los derechos de los contenidos. Si sospechas que se trata de tu contenido, reclámalo aquí.
Formatos disponibles
Descarga como PDF, TXT o lee en línea desde Scribd
Está en la página 1/ 22

ELO320 - Estructuras de Datos y Algoritmos

Tipos de Datos Abstractos


Árbol binario de Búsqueda

Dr. Nicolás Gálvez R.


[email protected]

Ing. Civil Telemática - Departamento de Electrónica

1er Semestre 2022

1/1
ABB: Árbol binario de búsqueda

Un árbol binario de búsqueda es una implementación del árbol binario que


permite guardar y buscar eficientemente de datos debido a su estructura.

2/1
ABB: Árbol binario de búsqueda

En un árbol binario de búsqueda, los hijos izquierdos guardan información


menor (o igual), y los hijos derechos guardan información mayor, con
respecto a la de su padre.

3/1
ABB: Árbol binario de búsqueda

A partir de esta regla de modelamiento se definen fácilmente las


operaciones de búsqueda, inserción, y eliminación de elementos. Además
de que los recorridos pre-orden, in-orden y post-orden sean efectivos para
determinadas labores.
4/1
ABB: Árbol binario de búsqueda
Por ejemplo, es fácil determinar el lugar y posición de los valores en un
intervalo.

¿Cómo determinan el sucesor y predecesor de un padre?


Sucesor: buscar en la derecha, todo hacia la izquierda.
Antecesor: buscar en la izquierda, todo hacia la derecha.
¿Cuál es su principal caracterı́stica?
Siempre tendrán a lo más un hijo.
5/1
ABB: Operaciones

Las operaciones más comunes de los ABB son:


init(): Inicializar el árbol (root == NULL).
size(): Cantidad de elementos en el árbol.
x preorden(): Operación x en pre-orden.
x inorden(): Operación x en in-orden.
x postorden(): Operación x en post-orden.
search(): Buscar un elemento en el árbol.
insert(): Insertar un elemento en el árbol.
delete(): Eliminar un elemento en el árbol.
clear(): Limpiar el árbol.

6/1
ABB: Recorrer
¿Como se imprimirı́an los datos del siguiente árbol con recorrido
pre-orden, in-orden y post-orden?

Pre-orden: 19 - 6 - 2 - 15 - 7 - 17 - 30 - 21 - 27 - 36
In-orden: 2 - 6 - 7 - 15 - 17 - 19 - 21 - 27 - 30 - 36
Post-orden: 2 - 7 - 17 - 15 - 6 - 27 - 21 - 36 - 30 - 19
7/1
ABB: Recorrer
¿Como se imprimirı́an los datos del siguiente árbol con recorrido
pre-orden, in-orden y post-orden?

Pre-orden: 19 - 6 - 2 - 15 - 7 - 17 - 30 - 21 - 27 - 36
In-orden: 2 - 6 - 7 - 15 - 17 - 19 - 21 - 27 - 30 - 36
Post-orden: 2 - 7 - 17 - 15 - 6 - 27 - 21 - 36 - 30 - 19
7/1
ABB: Recorrer
¿Como se imprimirı́an los datos del siguiente árbol con recorrido
pre-orden, in-orden y post-orden?

Pre-orden: 19 - 6 - 2 - 15 - 7 - 17 - 30 - 21 - 27 - 36
In-orden: 2 - 6 - 7 - 15 - 17 - 19 - 21 - 27 - 30 - 36
Post-orden: 2 - 7 - 17 - 15 - 6 - 27 - 21 - 36 - 30 - 19
7/1
ABB: Recorrer
¿Como se imprimirı́an los datos del siguiente árbol con recorrido
pre-orden, in-orden y post-orden?

Pre-orden: 19 - 6 - 2 - 15 - 7 - 17 - 30 - 21 - 27 - 36
In-orden: 2 - 6 - 7 - 15 - 17 - 19 - 21 - 27 - 30 - 36
Post-orden: 2 - 7 - 17 - 15 - 6 - 27 - 21 - 36 - 30 - 19
7/1
ABB: Buscar

Comenzaremos con la función básica search(): Buscar un


elemento en el árbol.

Se puede hacer de dos formas:


Usando un puntero para recorrer el árbol.
Recursivamente.

8/1
ABB: Buscar
Recursivamente
i n t ∗ s e a r c h ( n o d o t ∗ r a i z , i n t v a l u e ){

i f ( r a i z == NULL | | r a i z −>d a t o == v a l u e ) //{} o m i t i d a s


return raiz ;
e l s e i f ( v a l u e < r a i z −>d a t o )
r e t u r n s e a r c h ( r a i z −>h i j o i z q , v a l u e ) ;
e l s e i f ( v a l u e > r a i z −>d a t o ) // e l s e
r e t u r n s e a r c h ( r a i z −>h i j o d e r , v a l u e ) ;

Usando Puntero
i n t ∗ s e a r c h ( n o d o t ∗ r a i z , i n t v a l u e ){

nodo t ∗ rec = r a i z ;
w h i l e ( r e c !=NULL){
i f ( r e c−>d a t o == v a l u e ){
return rec ;
} e l s e i f ( v a l u e < r e c−>d a t o ){
r e c = r e c−>h i j o i z q ;
} e l s e i f ( v a l u e > r e c−>d a t o ){
r e c = r e c−>h i j o d e r ;
}
r e t u r n r e c ; // NULL s i no l o e n c u e n t r a o a r b o l v a c ı́ o
}

9/1
ABB: Insertar

Para poder insertar debemos buscar primero el lugar donde debe


realizarse la inserción. La idea es mantener el orden de nuestro ABB.

Nota: Si nuestro árbol no acepta elementos repetidos, al encontrar el


valor se detiene.

10/1
ABB: Insertar

Recursivamente
v o i d i n s e r t ( n o d o t ∗∗ r a i z , i n t v a l u e ){

i f (∗ r a i z == NULL){
∗ r a i z = malloc ( s i z e o f ( node t ) ) ;
(∗ r a i z )−> d a t o = v a l u e ;
(∗ r a i z )−> h i j o i z q = NULL ;
(∗ r a i z )−> h i j o d e r = NULL ;

}else i f ( v a l u e < (∗ r a i z )−>d a t o ){


i n s e r t (&((∗ r a i z )−> h i j o i z q ) , v a l u e ) ;

}else i f ( v a l u e > (∗ r a i z )−>d a t o ){


i n s e r t (&((∗ r a i z )−> h i j o d e r ) , v a l u e ) ;
}
}

11/1
ABB: Insertar
Cree el árbol binario que represente la siguiente secuencia de
enteros:
10 − 5 − 7 − 14 − 12 − 18 − 15

Spoiler

12/1
ABB: Insertar
Cree el árbol binario que represente la siguiente secuencia de
enteros:
10 − 5 − 7 − 14 − 12 − 18 − 15

Spoiler

12/1
ABB: Eliminar

Al igual que en insertar, deberemos buscar el nodo a eliminar. Pero para


poder eliminarlo, tendremos que considerar los siguientes casos:
Nodo objetivo es una hoja (no tiene hijos).
Nodo objetivo tiene un sólo hijo.
Nodo objetivo tiene dos hijos.

13/1
ABB: Eliminar hoja.

Es el caso más sencillo, solo corresponde a liberar el nodo desde el


puntero del padre.

14/1
ABB: Eliminar nodo con 1 hijo.

Caso intermedio. acá se elimina el nodo encontrado, pero su posición es


ocupada por su único hijo. Se eleva ese sub-árbol, un nivel.

15/1
ABB: Eliminar nodo con 2 hijos.

Caso recursivo o iterativo. Cuenta de dos pasos:


Reemplazar el nodo objetivo por una copia de su sucesor o
antecesor (uds. eligen).
Borrar el sucesor o antecesor original.

16/1
ABB: Insertar

Recursivamente
i n t d e l e t e ( n o d o t ∗∗ r a i z , i n t v a l u e ){
// ¿Cómo l o programan ?
// N e c e s i t a r á n a l g u n a f u n c i ón e x t r a .
}

17/1
Ejercicios

Para el siguiente conjunto {1, 4, 5, 10, 16, 17, 21}, dibuje


árboles binarios de búsqueda con altura 2, 3, 4, 5, y 6.
Escriba funciones recursivas para recorrer un árbol binario de
búsqueda en pre-orden y post-orden.
Asuma que tiene números entre 1 y 1000 en un árbol binario
de búsqueda y quiere buscar el nodo 363. ¿Cuál de las
siguientes secuencias de nodos NO podrı́a ser una secuencia
de nodos examinados en el árbol para llegar al nodo 363?
1 2, 252, 401, 398, 330, 344, 397, 363.
2 924, 220, 911, 244, 898, 258, 362, 363.
3 925, 202, 911, 240, 912, 245, 363.
4 2, 399, 387, 219, 266, 382, 381, 278, 363.
5 935, 278, 347, 621, 299, 392, 358, 363.

18/1

También podría gustarte