BINARIOS
E S T R U C T U R A S D E D AT O S
Las estructuras dinámicas son las en la ejecución varia el
número de elementos y uso de memoria a lo largo del
programa)
Nodo Raíz
A
B C
D E F G
K
H
MÁS TERMINOLOGÍA
• Nodo Padre: Se le llama así al nodo predecesor de un elemento.
• Nodo Hijo: Es el nodo sucesor de un elemento.
• Hermanos: Nodos que tienen el mismo nodo padre.
A
Nodo Padre
B C
B C
D E F G
D, H, F y K son Nodos Hojas
K
H
MÁS TERMINOLOGÍA
• Subárbol:Todos los nodos descendientes por la izquierda
o derecha de un nodo.
B C
D E F G
Subárbol derecho de C
K
H
Subárbol izquierdo de C
ALTURA Y NIVELES
A
Altura Nivel 0
del árbol C
B
=4 Nivel 1
D E F G
Nivel 2
K
H
Nivel 3
21 30
33 33
13 21
5 25 36 41
18 32
40 43
15
¿POR QUÉ NO SON ABB?
21 5
33 6
13 1
17 18 22 4
25 2
15 40
IMPLEMENTACIÓN DE UN
ABB…
IMPLEMENTACIÓN DE UN
ABB…
PROCESO PARA BUSCAR UN NODO...
Buscar el 25
Paso ¿El 25 es mayor o
menor que el 21?
Paso
21
1 2 21
¿El 25 es
13 33 33 mayor o menor
13 que el 33?
10 40 40
18 25 10 18 25
Paso
3 21
13 33
10 18 40
25
Encontrado
IMPLEMENTACIÓN DE LA BÚSQUEDA
...
p=raiz;
while (p != NULL)
{ if (p->info == valor)
return p; P contiene la dirección del nodo
que tiene el valor buscado
else
p=(p->info > valor? p->izq: p->der);
} Equivalente a:
return NULL; No se encontró el valor por lo que
if ( p -> info > valor )
se regresa un NULL
… p = p -> izq;
else p = p-> der;
PROCESO PARA AGREGAR
NODOS...
• Reglas:
– El valor a insertar no existe en el árbol.
– El nuevo nodo será un Nodo Hoja del árbol.
• Procedimiento
1. Buscar el Nodo Padre del nodo a agregar.
2. Agregar el nodo hoja.
EJEMPLO
Agregar el valor 26
10 40 40
18 25 10 18 25
Paso Paso
3 21 4 21
33 13 33
13
18 40 10 18 40
10 25 25
Se encontró el Nodo
Padre Agregar el nodo
26
COMENTARIOS
IMPORTANTES....
• El orden de inserción de los datos, determina la forma del ABB.
• ¿Qué pasará si se insertan los datos en forma ordenada?
• La forma del ABB determina la eficiencia del proceso de búsqueda.
• Entre menos altura tenga el ABB, más balanceado estará, y más
eficiente será. 10
13
Paso 21
1
Nodo Padre
33 localizado
13
Paso
10 18 25 40 21
2
13 33
10 18 40
25
Desconectarlo y
liberar el nodo
CASO: ELIMINAR NODO CON UN HIJO
Eliminar el valor 25
Paso 21
1
Nodo Padre
33 localizado
13
Paso
10 18 25 40 21
2
29 13 33
25
27 30 40
10 18
29
Conectar el Nodo
Padre con el Nodo
27 30 Hijo y liberar el
nodo.
CASO: ELIMINAR NODO CON DOS HIJOS
1. Localizar el nodo predecesor o sucesor del
nodo a borrar.
– El PREDECESOR es “el Mayor de los Menores”.
– El SUCESOR es “el Menor de los Mayores”.
– Para la implementación es igual de eficiente
programar la búsqueda del predecesor que del
sucesor.
2. El valor del Predecedor (o sucesor) se copia al
nodo a borrar.
3. Eliminar el nodo del predecesor (o sucesor
según sea el caso).
Implementación....
PREDECESOR
Uno a la IZQUIERDA y todo a la DERECHA
21
33
El predecesor de: Es:
13
33 30
10 25 40 21 13
29 29 27
27 30
SUCESOR
Uno a la DERECHA y todo a la IZQUIERDA
21
El sucesor de: Es:
33 21 25
13
33 40
10 18 25 40
29 30
29
27 30
IMPLEMENTACIÓN DEL....
PREDECESOR actual apunta al nodo a borrar
P = actual -> izq;
while( p -> der != NULL)
p=p->der;
return p;
SUCESOR
P = actual -> der;
While (p -> izq != NULL )
p=p->izq;
return p;
CASO: ELIMINAR NODO CON DOS
HIJOS
Eliminar el valor 21
utilizando el predecesor
Paso Localizar el valor a Paso 21
21 borrar 2
1
13 33
13 33
10 40
40 18 25
10 18 25
Localizar el Predecesor
13 33
13 33
10 25 40
18
10 18 40
25 Desconectar y liberar el
nodo del Predecesor
CASO: ELIMINAR NODO CON DOS
HIJOS
Eliminar el valor 21
utilizando el Sucesor
Paso Localizar el valor a Paso 21
21 borrar 2
1
13 33
13 33
10 40
40 18 25
10 18 25
Localizar el Sucesor
13 33
13 33
10 18 25 40
10 18 40 Desconectar y liberar el
25
nodo del Sucesor