You are on page 1of 35

A B

C
E F

ARBOLES BINARIOS
INTELIGENCIA ARTIFICIAL

ARBOL BINARIO

Un rbol binario es un rbol con raz en el que cada nodo tiene como mximo dos hijos.

A B D E F C

Estructura de datos en la cual cada nodo siempre tiene un hijo izquierdo (subrbol izquierdo) y un hijo derecho (subrbol derecho).

No pueden tener ms de dos hijos (de ah el nombre "binario").

Si algn hijo tiene como referencia a null, es decir que no almacena ningn dato, entonces este es llamado un nodo externo.

En el caso contrario el hijo es llamado un nodo interno.

Conceptos Bsicos

Nodos

Conj. finito de elementos.

Ramas Conj. finito de lneas dirigidas, conectan nodos que

A
B D C

Grado del Nodo Nro. De ramas descendentes con un

nodo.

Raz Primer nodo de un rbol no vaco

Raz Nodos
que

A A,B,C, (A,B),(B,D) G(A)=2 G(E)=0 G(C)=2

Camino Secuencia de nodos en los

Ramas Grado de A

c/nodo es adyacente al siguiente: - Solo existe 1 camino entre la raz y un nodo cualquier. - La distancia de un nodo a la raz

determina la rapidez de bsqueda.

Conceptos Bsicos

Padre: Tiene nodos sucesores

Hijos: Nodos sucesores


Descendientes: Hijos de los hijos. Ascendientes: Los padres y abuelos de un nodo hijo.

A B

Nivel 0
Nivel 1

C
E F G

Hermanos: 2 mas nodos del mismo padre. Hojas: nodo sin hijos Nivel de un nodo: Distancia a la raz. Altura o profundidad de un rbol: Nivel de la hoja del camino mas largo desde la raz mas uno. La altura de un rbol vaco es 0.

Nivel 2

Padres Hijos Descendientes de B Ascendientes de E Hermano Hojas Altura del rbol Altura del Subrbol

A, B, C De A (B y C) DyE ByA {B,C}, {F, G} D, E, F, G 3 de B es 2

Subrbol: Cualquier estructura conectada por debajo del raz.

Cada nodo de un rbol es la raz de un subrbol que se define por el nodo y todos los descendientes del nodo.

TIPO DE ARBOLES BINARIOS

1
rbol lleno es un rbol en el que todos sus subrboles tienen n hijos (siendo n el grado del rbol) y todas sus hojas tienen la misma profundidad.

2 4 5

rbol completo es un rbol cuyos nodos corresponden a los nodos numerados (la numeracin se realiza desde la raz hacia las hojas y, en cada nivel, de izquierda a derecha) de 1 a n en el rbol lleno del mismo grado. Todo rbol lleno es completo

1 2 4 5 6 3 7

PROPIEDADES I
El mximo nmero de nodos en un nivel i de un rbol binario es N(i) = 2i - 1 , i 1 Demostracin Base induccin nivel 1 (raz): N(1) = 21 - 1 = 20 = 1 (se cumple) Paso inductivo Se desea probar N(i-1) N(i), es decir, a partir de la suposicin temporal de que N es cierta para i-1 debemos probar que es cierta para i nivel i - 1: N(i-1) = 2( i - 1 ) - 1 = 2i - 2 (suponemos cierto) nivel i : N(i) = N(i-1) * 2 = 2 i - 2 * 2 = 2i - 2 + 1 = 2i - 1

PROPIEDADES II

El mximo nmero de nodos en un rbol binario de altura k es N(k) = 2k - 1, k 1 Demostracin


nivel nivel nivel ... nivel 1: 2(1) - 1 = 1 nodo 2: 2(2) - 1 = 3 nodos 3: 2(3) - 1 = 5 nodos k: 2k - 1 nodos

Altura k = 2(1) - 1 + 2(2) - 1 + ... + 2(k) - 1 = (S.P.G. ( r = 2, a1 = 20, n = k))

= 1 (2k - 1) / 2 - 1 = 2k 1

EQUILIBRIO DE ARBOL BINARIO


La distancia de un nodo al nodo raz determina la eficiencia con la que puede ser localizado. Por ejemplo, dado cualquier nodo de un rbol, a sus hijos

se puede acceder siguiendo slo un camino de bifurcacin


o de ramas, el que conduce al nodo deseado. De modo similar, los nodos a nivel 2 un rbol slo pueden ser accedidos siguiendo slo dos ramas del rbol.

EQUILIBRIO DE ARBOL BINARIO


FACTOR DE EQUILIBRIO

El factor de equilibrio de un rbol binario es la diferencia en altura


entre los subrboles derecho e izquierdo.

Si la altura del subrbol izquierdo es hI, y la altura del subrbol


derecho es hD, entonces el factor de equilibrio del rbol B se determina por la siguiente frmula. B= hD hI

EQUILIBRIO DE ARBOL BINARIO


ARBOL PERFECTAMENTE EQUILIBRADO

1
2 4 0 0 6 3 0 7

si su equilibrio o balance es cero, y sus subrboles son tambin perfectamente

equilibrados. Dado que esta definicin ocurre raramente se aplica una definicin alternativa. fe=0 ARBOL EQUILIBRADO

rbol perfectamente equilibrado

Fe(3)=hI- hD =3-3=0

Un rbol binario est equilibrado si la altura de


sus subrboles difiere en no ms de uno (su factor de equilibrio es -1, 01, +1) y sus

2
1 4 5

-1

3 0

subrboles son tambin equilibrados.


1<fe<1 Ej: fe=32=1

rbol equilibrado

Fe(3)=hI- hD =3-2=1

TDA RBOL BINARIO: Especificacin

Tipo de dato

Nodos del rbol

Operaciones Altura: de un rbol Borrar: Elimina del rbol a un nodo dado Bsqueda: Buscar un elemento en un rbol de Bsqueda Construir: crea un rbol con un elemento raz y dos ramas. Copiar: crear una copia del rbol

Crear Arbol: Inicia un rbol vaco


Derecho: da la rama derecha de un rbol dado. Elementos: determina el nmero de elementos del rbol

TDA RBOL BINARIO: Especificacin

Operaciones EsVacio: comprueba si el rbol tiene nodos Iguales: determinar si dos rboles son idnticos Insertar: inserta un nodo dentro de un rbol Izquierdo: da la rama izquierda de un rbol dado. Pertenece: Determina si un elemento pertenece a un rbol.

Recorrer: el rbol de acuerdo algunos de los criterios


Profundidad: determina la profundidad de un rbol dado Raiz:devuelve el nodo raz. .

TDA RBOL BINARIO: Especificacin

Crear rbol

Inicia el rbol como vaco

Construir

Crea un rbol con un elemento raz y dos ramas, izquierda y derecha que son, a su vez, rboles

Es vaco

Comprueba si el rbol no tiene nodos

TDA RBOL BINARIO: Especificacin

Raz

Devuelve el nodo raz

Izquierdo

Obtiene la rama subrbol izquierdo de un rbol dado

Derecho

Obtiene la rama subrbol Derecho de un rbol dado

TDA RBOL BINARIO: Especificacin

Borrar

Elimina del rbol el nodo con un elemento determinado

Pertenece

Determina si un elemento se encuentra en el rbol

Estructura de un rbol binario


La estructura de un rbol binario se construye
con nodos.

Cada nodo debe contener el campo dato (datos


a almacenar) y dos campos de tipo puntero, uno al subrbol izquierdo y otro al subrbol derecho, que se conocen como puntero

izquierdo y puntero derecho respectivamente,

Un valor NULL indica un rbol o un subrbol


vaco.

Estructura de un rbol binario


A

NULL

NULL

NULL

NULL

NULL

NULL

NULL

NULL

NULL

ESTRUCTURA DE UN ARBOL

typedef struct nodo { int clave; struct nodo *izdo, *dcho; }Nodo;

<tipoDato> <punteros a nodo>

typedef struct tArbol { int clave; tArbol hIzquierdo, hDerecho; } tArbol; tArbol rbol[NUMERO_DE_NODOS];

int rbol[NUMERO_DE_NODOS];

Arbol Binario Busqueda


int buscar(tArbol *a, int elem) { if (a == NULL) return 0; else if (a->clave < elem) return buscar(a->hDerecho, elem); else if (a->clave > elem) return buscar(a->hIzquierdo, elem); return 1; }

else

Insercion

void insertar(tArbol **a, int elem) { if (*a == NULL) { *a = (tArbol *) malloc(sizeof(tArbol)); (*a)->clave = elem; (*a)->hIzquierdo = NULL; (*a)->hDerecho = NULL; } else if ((*a)->clave < elem) insertar(&(*a)->hDerecho, elem); else if ((*a)->clave > elem) insertar(&(*a)->hIzquierdo, elem);

Actualizar
void reemplazar(tArbol **a, tArbol **aux) { if ((*a)->hDerecho == NULL) { (*aux)->clave = (*a)->clave; *aux = *a; *a = (*a)->hIzquierdo; } else reemplazar(&(*a)->hDerecho, aux); }

RECORRIDOS
Recorrer un rbol es visitar cada nodo del rbol una

sola vez
Recorrido de un rbol es la lista de etiquetas del rbol ordenadas segn se visitan los nodos

Se distinguen dos categoras bsicas de recorrido:

Recorridos en profundidad
Recorrido en preorden Recorrido en postorden Recorrido en inorden

Recorridos en amplitud (o por niveles)

RECORRIDOS

RECORRIDOS EN PROFUNDIDAD (I)

Si representamos por I: ir hacia la izquierda, R: visitar o escribir el


item, D: ir hacia la derecha, existen 6 posibles formas de recorrido en profundidad: RID, IRD, IDR, RDI, DRI y DIR. Si slo queremos hacer los recorridos de izquierda a derecha quedan 3 formas de recorrido:
1. RID o preorden (orden previo) 2. IRD o inorden (orden simtrico) 3. IDR o postorden (orden posterior) (El recorrido en postorden es el inverso especular del recorrido preorden, es decir, se recorre el rbol en preorden, visitando primero el subrbol derecho antes que el izquierdo, y se considera la lista resultante como el inverso de la solucin)

RECORRIDOS

RECORRIDOS EN PROFUNDIDAD (II) RECORRIDO EN PREORDEN


En este tipo de recorrido se realiza cierta accin (quizs simplemente imprimir por pantalla el valor de la clave de ese nodo) sobre el nodo actual y posteriormente se trata el subrbol izquierdo y cuando se haya concluido, el subrbol derecho. Otra forma para entender el recorrido con este metodo seria seguir el orden: nodo raiz, nodo izquierda, nodo derecha.

En el rbol de la figura el recorrido en preorden sera: 2, 7, 2, 6, 5, 11, 5, 9 y 4.

RECORRIDOS

RECORRIDOS EN PROFUNDIDAD (III) RECORRIDO EN PREORDEN void preorden(tArbol *a)

{
if (a != NULL) { tratar(a); //Realiza una operacin en nodo

preorden(a->hIzquierdo);
preorden(a->hDerecho); } }

RECORRIDOS

RECORRIDOS EN PROFUNDIDAD (III) RECORRIDO EN POSTORDEN


En este caso se trata primero el subrbol izquierdo, despus el derecho y por ltimo el nodo actual. Otra forma para entender el recorrido con este metodo seria seguir el orden: nodo izquierda, nodo derecha, nodo raiz. En el rbol de la figura el recorrido en postorden sera: 2, 5, 11, 6, 7, 4, 9, 5 y 2.

RECORRIDOS

RECORRIDOS EN PROFUNDIDAD (IV) RECORRIDO EN POSTORDEN void postorden(tArbol *a) { if (a != NULL) { postorden(a->hIzquiedo); postorden(a->hDerecho); tratar(a); //Realiza una operacin en nodo } }

RECORRIDOS

RECORRIDOS EN PROFUNDIDAD (V) RECORRIDO EN INORDEN


En este caso se trata primero el subrbol izquierdo, despus el nodo actual y por ltimo el subrbol derecho. En un ABB este recorrido dara los valores de clave ordenados de menor a mayor. Otra forma para entender el recorrido con este metodo seria seguir el orden: nodo izquierda,nodo raiz,nodo derecha.

En el rbol de la figura el recorrido


en inorden sera: 2, 7, 5, 6, 11, 2, 5, 4, 9.

RECORRIDOS

RECORRIDOS EN PROFUNDIDAD (VI) RECORRIDO EN INORDEN


void inorden(tArbol *a) { if (a != NULL) { inorden(a->hIzquierdo); tratar(a); //Realiza una operacin en nodo inorden(a->hDerecho); } }

RECORRIDOS

RECORRIDO EN AMPLITUD (O POR NIVELES)

Consiste en visitar los nodos desde la raz hacia las hojas, y de izquierda a derecha dentro de cada nivel
En este caso el recorrido se realiza en orden por los distintos niveles del rbol. As, se comenzara tratando el nivel 1, que slo contiene el nodo raz, seguidamente el nivel 2, el 3 y as sucesivamente. En el rbol de la figura el recorrido en amplitud sera: 2, 7, 5, 2, 6, 9, 5, 11 y 4

RECORRIDOS

RECORRIDO EN AMPLITUD (O POR NIVELES)

Al contrario que en los mtodos de recorrido en profundidad,


el recorrido por niveles no es de naturaleza recursiva. Por ello, se debe utilizar una cola para recordar los subrboles izquierdos y derecho de cada nodo.

El esquema algoritmo para implementar un recorrido por niveles es exactamente el mismo que el utilizado en la versin iterativa del recorrido en preorden pero cambiando la

estructura de datos que almacena los nodos por una cola.

RECORRIDOS

EJEMPLO DE RECORRIDOS

Niveles A ABCDEFGHI C E H Inorden: D H E AFICG D G I

B F

Postorden:
DHEBIFGCA Preorden: ABDEHCFIG

METODOS PARA ALMACENAR ARBOLES BINARIOS

Los rboles binarios pueden ser construidos a partir de lenguajes de

programacin de varias formas.

En un lenguaje con registros y referencias, los rboles binarios son construidos tpicamente con una estructura de nodos y punteros en la

cual se almacenan datos, cada uno de estos nodos tiene una referencia
o puntero a un nodo izquierdo y a un nodo derecho denominados hijos.

En ocasiones, tambin contiene un puntero a un nico nodo. Si un nodo

tiene menos de dos hijos, algunos de los punteros de los hijos pueden
ser definidos como nulos para indicar que no dispone de dicho nodo.

METODOS PARA ALMACENAR ARBOLES BINARIOS

METODOS PARA ALMACENAR ARBOLES BINARIOS

Los rboles binarios tambin pueden ser almacenados como una estructura de datos implcita en vectores, y si el rbol es un rbol

binario completo, este mtodo no desaprovecha el espacio en memoria.

Tomaremos como notacin la siguiente: si un nodo tiene un ndice i, sus hijos se encuentran en ndices 2i + 1 y 2i + 2, mientras que sus padres (si los tiene) se encuentra en el ndice (partiendo de que la raz tenga

ndice cero).

Este mtodo tiene como ventajas el tener almacenados los datos de forma ms compacta y por tener una forma ms rpida y eficiente de localizar los datos en particular durante un preoden transversal.

Sin embargo, desperdicia mucho espacio en memoria.