Sunteți pe pagina 1din 28

rboles Binarios

Estructuras de Datos
Las estructuras dinmicas son las en la ejecucin
varia el nmero de elementos y uso de memoria a lo
largo del programa)

Entre estas tenemos:

Lineales (listas enlazadas, pilas y colas)


No lineales (arboles binarios y grafos o redes)
Qu es un rbol?

Es una estructura de datos jerrquica.


La relacin entre los elementos es de uno a
muchos.
Terminologa
Nodo: Cada elemento en un rbol.
Nodo Raz: Primer elemento agregado al rbol.

Nodo Raz
A

B C

D E F G

K
H
Ms terminologa
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

F y G son Nodos Hijos de C


D E F G
F y G son hermanos
K
H
Ms terminologa

Nodo Hoja: Aquel nodo que no tiene hijos.

B C

D E F G
D, H, F y K son Nodos Hojas
K
H
Ms terminologa

Subrbol: Todos los nodos descendientes por la izquierda


o derecha de un nodo.

B C

D E F G
Subrbol derecho de C
K
H

Subrbol 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

La Altura es la cantidad de niveles.


rbol Binario de Bsqueda (ABB)
Este tipo de rbol permite almacenar
informacin ordenada.
Reglas a cumplir:
Cada nodo del rbol puede tener 0, 1 2 hijos.
Los descendientes izquierdos deben tener un valor
menor al padre.
Los descendientes derechos deben tener un valor
mayor al padre.
Ejemplos de ABB

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
Implementacin de un ABB

class NodoArbol
{
public:
int info;
NodoArbol *izq, *der;
NodoArbol( );
NodoArbol(int dato);
};
NodoArbol(void) { izq = der = NULL; }
NodoArbol(int dato) { info = dato; izq = der = NULL; }
Continuacin

class ABB
{
private:
NodoArbol *raiz;
public:
ABB( ); // constructor
~ABB( ); // destructor
//otros mtodos
};
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
Implementacin de la bsqueda

...
p=raiz;
while (p != NULL)
{ if (p->info == valor)
return p;
else P contiene la direccin del nodo
que tiene el valor buscado
p=(p->info > valor? p->izq: p->der);
}
return NULL; Equivalente a:
No se encontr el valor por lo que
se regresa un NULL if ( p -> info > valor )
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

Paso El 26 es mayor o
menor que el 21?
Paso
21
1 2 21
El 26 es
13 33 33 mayor o menor
13 que el 33?

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 insercin 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 bsqueda.
Entre menos altura tenga el ABB, ms balanceado estar, y ms
eficiente ser.

10

13

Este rbol est 18


desbalanceado
porque los valores se
agregaron en el siguiente 21
orden:
10, 13, 18, 21, 25, 33, 40
25
Implementacin....
bool ABB::Insertar(int valor)
{
NodoArbol *nuevo, *actual, *anterior;
nuevo = new NodoArbol(valor);
actual = raiz;
anterior = NULL;
while ( actual != NULL )
{ Busca el Nodo Padre.
if ( valor == actual -> info ) return 0; Al final, Anterior ser el
padre del nuevo nodo.
anterior = actual;
actual = (actual->info > valor ? actual->izq : actual->der);
}
if(anterior==NULL)
raiz=nuevo; Agrega el nodo como
else { nodo hoja.
if ( anterior -> info > valor ) Si Anterior es igual a
anterior -> izq = nuevo; NULL quiere decir que
else el rbol est vaco por
lo que el nodo a agregar
anterior -> der = nuevo; ser la raz.
}
return 1;
}
Proceso para eliminar un nodo
Si el nodo a eliminar es un:
Nodo hoja
Buscar el Nodo Padre del nodo a borrar.
Desconectarlo.
Liberar el nodo.
Nodo con un hijo
Buscar el Nodo Padre del nodo a borrar.
Conectar el hijo con el padre del nodo a borrar.
Liberar el nodo.
Nodo con dos hijos
Localizar el nodo predecesor o sucesor del nodo a borrar.
Copiar la informacin.
Eliminar el predecesor o sucesor segn sea el caso.
Caso: Eliminar Nodo hoja
Eliminar el valor 25

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 implementacin es igual de eficiente
programar la bsqueda 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
segn sea el caso).
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
Implementacin 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

Copiar el valor del Paso


Paso Predecesor al nodo que 4 18
3 18 contena el valor a borrar

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

Copiar el valor del Paso


Paso Sucesor al nodo que 4 18
3 25 contena el valor a borrar

13 33

13 33

10 18 25 40
10 18 40 Desconectar y liberar el
25
nodo del Sucesor

S-ar putea să vă placă și