Está en la página 1de 78

ARBOLES

ESTRUCTURAS DE DATOS
2006
DEFINICION

Un rbol (tree) es un conjunto finito de


nodos. Es una estructura jerrquica
aplicable sobre una coleccin de elementos
u objetos llamados nodos; uno de los cuales
es conocido como raz.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Los rboles representan las estructuras no
lineales y dinmicas. No lineales, puesto
que a cada elemento del rbol pueden
seguirle varios elementos. Dinmicas,
puesto que la estructura rbol puede
cambiar durante la ejecucin del programa.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
EJEMPLOS DE ARBOLES

Figura 1 :rboles

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
CARACTERISTICAS Y PROPIEDADES DE
LOS RBOLES EN GENERAL

Todo rbol que no es vaco, tiene un nico nodo raz.


Un nodo X es descendiente directo de un nodo Y, si el nodo X
apunta al nodo Y. X es hijo de Y.
Un nodo X es antecesor directo de un nodo Y, si el nodo X apunta
al nodo Y. X es el padre de Y.
Se dice que todos los nodos que son descendientes directos
(hijos) de un mismo nodo (padre), son hermanos.
Todo nodo que no tiene ramificaciones (hijos) se conoce con el
nombre de terminal u hoja.
Todo nodo que no es raz, ni terminal u hoja se conoce con
el nombre de interior.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
CARACTERISTICAS Y PROPIEDADES DE
LOS RBOLES EN GENERAL

Grado es el nmero de descendientes directos de un


determinado nodo. Grado del rbol es el mximo grado de todos
los nodos del rbol.
Nivel es el nmero de arcos que deben ser recorridos para
llegar a un determinado nodo. Por definicin la raz tiene nivel 1.
Altura del rbol es el mximo nmero de niveles de todos los
nodos del rbol.
Rama es un camino desde el nodo raz a una hoja.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Figura 2 :rbol General

A raz del rbol El grado de nodo A es 2


B es el hijo de A. C es hijo de A. El grado de nodo B es 3
B es padre de D. D es padre de I. El grado de nodo C es 2
B y C son hermanos. D, E, F son hermanos. El grado de nodo D es 1
I, E, J, K, G, L son hojas. El grado de nodo E es 0
B, D, F, C y H son nodos interiores. Grado del rbol es 3
Nivel del nodo A es 1. Nivel del nodo E es 3.
La altura del rbol es 4.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES BINARIOS

Definicin 1:

Un rbol binario es un rbol en el que cada nodo no puede tener mas


de dos hijos o descendientes. Es un rbol de grado 2.

Definicin 2:

Un rbol binario es un conjunto finito de nodos, el cual puede ser vaco


o un conjunto que consta de un nodo raz enlazado a dos rboles
binarios disjuntos denominados subrbol izquierdo y subrbol derecho.

Ing. M.Sc. Fulbia Torres


Figura 3 :rboles Binarios
Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES BINARIOS
TERMINOLOGIA

En un rbol binario los hijos se conocen como hijo izquierdo e hijo


derecho

Un nodo que no tiene hijos se denomina hoja. En la figura 4 B, C


son hojas.

El nodo raz se dice que est en el nivel O en el rbol. Los nodos B y


C estn en el nivel 1. (figura 4)

Altura del rbol se define como el nivel ms alto del rbol. En la


figura 4 la altura del rbol es 2.

Ing. M.Sc. Fulbia Torres


Figura 4 :rbol Binario
Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES BINARIOS
TERMINOLOGIA

Un rbol binario est balanceado (equilibrado) si cada nodo tiene


exactamente dos hijos o no tiene hijos y si cada hoja est al mismo
nivel.

Figura 5 :rbol Binario Equilibrado Figura 6 :rbol Binario no Equilibrado

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES BINARIOS
TERMINOLOGIA

Los subrboles izquierdo y derecho de un rbol binario deben ser


subconjuntos disjuntos, esto es, ningn nodo puede estar en ambos
subrboles. Ejemplo:

(a) (b)

Figura 7 :rboles Binarios: a) no Disjunto. b) Disjunto

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES BINARIOS DISTINTOS,
SIMILARES Y EQUIVALENTES

RBOLES BINARIOS DISTINTOS

Dos rboles binarios son distintos cuando sus estructuras son


diferentes

Figura 8 :rboles Binarios distintos

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES BINARIOS DISTINTOS,
SIMILARES Y EQUIVALENTES

RBOLES BINARIOS SIMILARES

Dos rboles binarios son similares cuando sus estructuras son


idnticas, pero la informacin que contiene sus nodos difiere entre s.

Figura 9 :rboles Binarios similares

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES BINARIOS DISTINTOS,
SIMILARES Y EQUIVALENTES

RBOLES BINARIOS EQUIVALENTES

Dos rboles binarios son equivalentes si son similares y adems los


nodos contienen la misma informacin.

Figura 10 :rboles Binarios equivalentes

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES BINARIOS COMPLETOS

Se define como un rbol en el que todos sus nodos, excepto los del
ltimo nivel, tienen dos hijos; el subrbol izquierdo y el subrbol
derecho.

Figura 11 :rbole Binario completo

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE LOS RBOLES
GENERALES COMO BINARIOS

Los pasos que se deben aplicar para lograr la conversin del rbol
general a binario son los siguientes:

Deben enlazarse los hijos de cada nodo en forma horizontal (los


hermanos).

Debe enlazarse en forma vertical el nodo padre con el hijo que se


encuentra ms a la izquierda.

Debe rotarse el diagrama resultante, aproximadamente 45 grados


hacia la izquierda y as se obtendr el rbol binario
correspondiente.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE LOS RBOLES
GENERALES COMO BINARIOS

Figura 12 : Conversin de un rbol general en un rbol


binario. (a) rbol general. (b) rbol binario luego de
aplicar pasos 1 y 2. (c) rbol binario luego de aplicar el
paso 3.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE LOS RBOLES
GENERALES COMO BINARIOS

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE LOS RBOLES
GENERALES COMO BINARIOS

Todo rbol binario obtenido a partir de un rbol general, debe cumplir lo


siguiente:

En la rama derecha de cada nodo, excepto el nodo raz, si sta es


distinta de vaco se encuentra un nodo que era hermano de ste en el
rbol general.

En la rama izquierda de cada nodo (si sta es distinta de vaco), se


encuentra un nodo que era hijo de ste en el rbol generado.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE RBOLES
BINARIOS EN MEMORIA

Existen dos formas tradicionales de representar un rbol binario en


memoria.

Por medio de listas enlazadas, variables dinmicas.

Por medio de arreglos.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE RBOLES
BINARIOS EN MEMORIA. POR MEDIO DE
LISTAS ENLAZADAS.
Los nodos del rbol binario sern representadas como registros, que
contendrn como mnimo tres campos. En un campo se almacenar la
informacin del nodo. Los dos restantes se utilizarn para apuntar los
subrboles izquierdo y derecho respectivamente del nodo en cuestin.
Dado el siguiente nodo T:

Donde:
IZQ: campo donde se almacena la direccin del subrbol izquierdo del
nodo T.
INFO: campo donde se almacena la informacin de inters del nodo.
DER: campo donde se almacena la direccin del subrbol derecho del nodo
T.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE RBOLES
BINARIOS EN MEMORIA. POR MEDIO DE
LISTAS ENLAZADAS.

La definicin de un rbol binario en lenguaje algortmico es como sigue.

Enlace = nodo
Nodo = registro
IZQ: tipo enlace
INFO: tipo dato
DER: tipo enlace
{Fin de la definicin}

Nota: se utiliza para representar el concepto de dato tipo puntero.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE RBOLES
BINARIOS EN MEMORIA. POR MEDIO DE
LISTAS ENLAZADAS.

Figura 13 : Representacin de un rbol


binario en memoria. (a) rbol binario. (b)
rbol binario representacin memoria.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE RBOLES
BINARIOS EN MEMORIA. POR MEDIO DE
ARREGLOS.

(b)

2n-1= 24-1=16-1=15
(a)

Figura 14 : Representacin de un rbol


binario en memoria. (a) rbol binario. (b)
rbol binario representacin memoria con
arreglos.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
REPRESENTACION DE RBOLES
BINARIOS EN MEMORIA. POR MEDIO DE
ARREGLOS.

Para calcular el nmero de elementos de un rbol es: 2n-1. n = nivel de


profundidad.

Dado un nodo I, padre de I pos = [I/2]

Dado un nodo I, hijo izq. pos = 2*I

Dado un nodo I; hijo der. pos= 2* I + 1

Desventaja: el espacio que hay que dejar disponible, sino se le asigna


hijo izq. o der. el espacio se esta multiplicando. Cuando se trabaja con
rboles degenerados se pierde mucho espacio.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES DE EXPRESIN

Los rboles binarios se utilizan para representar expresiones en


memoria, esencialmente en compiladores de lenguajes de programacin

CONSTRUCCION DE RBOLES DE EXPRESION

Los parntesis no se almacenan en el rbol pero


estn implicados en la forma del rbol. Si se supone que todos los
operadores tienen dos operandos, se puede representar una expresin
por un rbol binario cuya raz contiene un operador y cuyos subrboles
izquierdo y derecho son los operandos izq. y der. respectivamente.
Cada operando puede ser una letra o una subexpresin representada
como un subrbol. Todos los operandos letras se almacenan en nodos
hojas.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES DE EXPRESIN

Ejemplo 1: Dada la expresin (X+Y) * (A-B) construir el rbol de


expresin.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RBOLES DE EXPRESIN

Ejemplo 3: Deducir la expresin que representa el siguiente rbol


binario.

1. X+Y 2. A*(X+Y) 3.(A*(X+Y)) *C

Sol: (A*(X+Y)) *C

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RECORRIDOS EN RBOLES BINARIOS

Recorrer un rbol binario significa visitar los nodos del rbol en


forma sistemtica, de tal manera que todos los nodos del mismo sean
visitados una sola vez.

Existen tres formas diferentes de efectuar el recorrido (todos de


forma recursiva) los cuales son:

Recorrido en Preorden
Recorrido en Inorden
Recorrido en Posorden

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RECORRIDOS EN RBOLES BINARIOS

RECORRIDO EN PREORDEN

 Visitar raz (escribir la informacin del nodo).


 Recorrer el subrbol izquierdo en preorden.
 Recorrer el subrbol derecho en preorden.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RECORRIDOS EN RBOLES BINARIOS

Algoritmo:

Preorden (nodo)
Si nodo Nil entonces { Visitar el nodo (escribir nodoInfo)
Regresar a Preorden con (nodoIzq)
Regresar a Preorden con (nododer) }
Fin.

El valor en cada nodo es procesado conforme se pasa por cada nodo.


Despus de que se procese el valor de un nodo dado, son procesados
los valores del subrbol izquierdo y a continuacin los valores en el
subrbol derecho.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RECORRIDOS EN RBOLES BINARIOS

RECORRIDO EN INORDEN

 Recorrer el subrbol izquierdo en Inorden


 Visitar raz (procesar el valor en el nodo).
 Recorrer el subrbol derecho en Inorden

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RECORRIDOS EN RBOLES BINARIOS

Algoritmo:

Inorden (nodo)
Si nodo Nil entonces { Regresar a Inorden (nodoIzq)
Visitar el nodo (escribir nodoInfo)
Regresar a Inorden con (nododer) }
Fin.

El valor en un nodo no es procesado en tanto no sean procesados los


valores de su subrbol izquierdo.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RECORRIDOS EN RBOLES BINARIOS

RECORRIDO EN POSORDEN

 Recorrer el subrbol izquierdo en Posorden


 Recorrer el subrbol derecho en Posorden
 Visitar raz (procesar el valor en el nodo).

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
RECORRIDOS EN RBOLES BINARIOS

Algoritmo:

Posorden (nodo)
Si nodo Nil entonces { Regresar a Posorden (nodoIzq)
Regresar a Posorden con (nododer)
Visitar el nodo (escribir nodoInfo) }
Fin.

El valor en cada nodo no se imprime hasta que son impresos los


valores de sus hijos.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL
BINARIO UTILIZANDO STRUCT

DEFINICIN

#define NULL 0

struct nodo
{
struct nodo *izq;
tipo info;
struct nodo *der;
};

Con esta definicin de ArbolB las operaciones asociadas especificadas


en el TAD quedaran del siguiente modo:

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL
BINARIO UTILIZANDO STRUCT

Inicializa el rbol Binario a travs del apuntador raz.

void InicializarArbolB (struct nodo **raiz)


{

(*raiz)=NULL;

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT

Crea un rbol Binario con un solo nodo, el nodo Raz.

struct nodo *CrearArbolB(int valor)


{
struct nodo *nuevo;

if (!ArbolBLleno())

{ nuevo = new nodo;


nuevo ->info = valor;
nuevo ->izq = NULL;
nuevo ->der = NULL;
return nuevo;
}
else
cout << "rbol Overflow ";
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT

A partir de dos rboles binarios y de un valor de tipo base, el resultado es


un nuevo rbol binario cuyo nodo raz contiene el valor de tipo base y en el
que los rboles originales pasan a ser subrboles izquierdo y derecho.

struct nodo * CombArbolB(struct nodo *B1,struct nodo *B2, int valor)


{
struct nodo *nuevo;

if (!ArbolBLleno())

{ nuevo = CrearArbolB(valor);
nuevo->izq=B1;
nuevo->der=B2;
return nuevo;
}

else
cout << "rbol Overflow ";
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT
Inserta un nodo en el rbol Binario como hijo Izquierdo.

bool InsHijoIzq(struct nodo *p, int valor)


{
struct nodo *nuevo;

if (p!=NULL)
if (!ArbolBLleno())
{ nuevo = CrearArbolB(valor);
p->izq = nuevo;
return true;
}
else
{ cout << "Nodo P No Existe ";
return false;
}
else
{ cout << "rbol Overflow ";
return false;
}
}
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT

Inserta un nodo en el rbol Binario como hijo Derecho.

bool InsHijoDer(struct nodo *p, int valor)


{
struct nodo *nuevo;

if (p!=NULL)
if ((!ArbolBLleno()))
{ nuevo = CrearArbolB(valor);
p->der = nuevo;
return true;
}
else
{ cout << "Nodo P No Existe ";
return false;
}
else
{ cout << "rbol Overflow ";
return false;
}
}
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT
Dado un rbol, elimina el nodo cuya direccin se enva como
parmetro en Ptr.
void ElimNodo(struct nodo *ptr)
{
struct nodo *ant;
struct nodo *temp;
temp = ptr;

if (ptr->der==NULL)
ptr=ptr->izq;
else if (ptr->izq==NULL)
ptr=ptr->der;
else
{
temp=ptr->izq;
ant=ptr;
while(temp->der!=NULL)
{ ant = temp;
temp = temp->der;
}
ptr->info = temp->info;
if (ant==ptr)
ant->izq = temp->izq;
else ant->der = temp->izq;
}
Ing. M.Sc. Fulbia Torres
delete temp;
Asignatura: Estructuras de Datos
}
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT

Dado un rbol Binario devuelve la informacin almacenada en su nodo


raz.

int DatoRaiz(struct nodo *p)


{
return p->info;
}

Devuelve el valor verdadero si el rbol Binario est vaco y falso en


caso contrario.

bool ArbolBVacio(void)
{
return (raiz==NULL);
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT

Devuelve el valor verdadero si el rbol Binario est lleno y falso en


caso contrario.

bool ArbolBLleno(void)
{
struct nodo *p;

p = new nodo;
if (p!=NULL)
{
delete p;
return false;
}
else return true;
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT

Permite que una vez que no se requiera ms de la utilizacin del


rbol Binario, liberar este espacio.

void LiberarNodos( const struct nodo Tree)


{
if (Tree != NULL)
{ LiberarNodos(Tree->izq);
LiberarNodos(Tree->der);
delete Tree;
}
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT
Recorridos en el rbol binario

void RecorrerPreOrdenArbol (struct nodo **raiz)


{
if ((*raiz)!=NULL)
{
cout << " " << (*raiz)->info;
RecorrerPreOrdenArbol(&((*raiz)->izq));
RecorrerPreOrdenArbol(&((*raiz)->der));
}
}

void RecorrerInOrdenArbol (struct nodo **raiz)


{
if ((*raiz)!=NULL)
{
RecorrerInOrdenArbol (&((*raiz)->izq));
cout << " " << (*raiz)->info;
RecorrerInOrdenArbol (&((*raiz)->der));
}
}
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT

Recorridos en el rbol binario


void RecorrerPostOrdenArbol (struct nodo **raiz)
{
if ((*raiz)!=NULL)
{
RecorrerPostOrdenArbol (&((*raiz)->izq));
RecorrerPostOrdenArbol (&((*raiz)->der));
cout << " " << (*raiz)->info;
}
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL BINARIO
UTILIZANDO STRUCT

Busca un elemento en el rbol binario

int EstaenArbol(struct nodo **raiz, int elem)


{
if ((*raiz)==NULL)
return 0;

else if (elem==((*raiz)->info))
return 1;

else return (EstaenArbol((&((*raiz)->izq)),elem) || EstaenArbol((&((*raiz)->der)),elem));


}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
ARBOL BINARIO DE BUSQUEDA

Un rbol binario de bsqueda (que no tiene los valores duplicados de


nodos) tienen la caracterstica que los valores en cualquier subrbol
izquierdo son menores que el valor en sus nodos padres y los valores
en cualquier subrbol derecho son mayores que el valor en sus nodos
padres.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
ARBOL BINARIO DE BUSQUEDA

Recorrido del rbol:


Preorden: 47 25 11 7 17 43 31 44 77 65 68 93
Inorden: 7 11 17 25 31 43 44 47 65 68 77 93
Posorden: 7 17 11 31 44 43 25 68 65 93 77 47

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
CREACION DE UN ARBOL BINARIO DE
BUSQUEDA

Supongamos que se desea almacenar los nmeros: 8 3 1 20 10 5 4 en un


rbol binario de bsqueda. Siguiendo la regla, dado un nodo en el rbol
todos los datos a su izquierda deben ser menores que todos los datos del
nodo actual, mientras que todos los datos a ala derecha deban ser
mayores, que dichos datos. Inicialmente el rbol esta vaco y se le debe
insertar el 8.

A continuacin viene el 3. Ya que 3 es menor que 8, el 3 debe ir en el


subrbol izquierdo.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
CREACION DE UN ARBOL BINARIO DE
BUSQUEDA

A continuacin viene el 3. Ya que 3 es menor que 8, el 3 debe ir en el


subrbol izquierdo.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
CREACION DE UN ARBOL BINARIO DE
BUSQUEDA

A continuacin se ha de insertar 1 que es menor que 8 y que 3; por lo


tanto ir a la izquierda y debajo de 3.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
CREACION DE UN ARBOL BINARIO DE
BUSQUEDA

Cada nuevo elemento se inserta como una hoja del rbol. Los restantes
elementos se pueden situar fcilmente.

Una propiedad de los rboles binarios de bsqueda es que no son nicos


para los datos dados.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
CREACION DE UN ARBOL BINARIO DE
BUSQUEDA

Ejemplo: Construir un rbol binario para almacenar los datos 12, 8, 7,


16 y 11.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
CONSTRUCCION DE UN RBOL BINARIO
DE BSQUEDA A PARTIR DE RECORRIDO
INORDEN, PREORDEN, POSORDEN.

Si se dan los recorridos inorden y preorden se procede la siguiente


manera:
En el preorden el primer elemento es el nodo raz y los siguientes son
nodo raz de los dems.
Se busca en el inorden ese nodo raz y se divide en subrbol izquierdo y
derecho.
En el preorden se busca el siguiente nodo raz y en el inorden los
subrboles y as sucesivamente hasta agotar los valores.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Ejemplo: Dado los valores:
Inorden 6 13 17 27 33 42 48
Preorden 27 13 6 17 42 33 48
Construir el rbol binario de bsqueda correspondiente.

Se busca en el preorden el primer elemento que es nodo raz.

Se busca en el inorden ese valor y se divide en subrbol izquierdo y


derecho.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Se busca en el preorden el siguiente nodo raz y se subdivide en
subrbol izquierdo y derecho y as sucesivamente.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Ejemplo: Un rbol binario tiene 10 nodos. El recorrido es inorden y
preorden. Son dados como sigue. Dibuje el rbol.
Inorden: ABCEDFJGIH
Preorden: JCBADEFIGH

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Ejemplo: Dados los valores:
Inorden: 6 13 17 27 33 42 48
Posorden: 6 17 13 33 48 42 27
Construir el rbol binario de bsqueda correspondiente.

Se busca en el posorden el ltimo valor que es el nodo raz.

Se busca en inorden el valor y se divide en subrbol izquierdo y


derecho.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Se busca en posorden siguiente nodo raz que es 42.

Se busca en posorden siguiente nodo raz que es 13.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
OPERACIONES DE BSQUEDA,
INSERCCION Y ELIMINACION
El rbol binario de bsqueda es una estructura sobre la cual se pueden
realizar eficientemente las operaciones de bsqueda, insercin y
eliminacin.
Bsqueda (nodo, valor)
Algoritmo
Si nodo <> Nil
Entonces Si valor < nodo info.
Entonces Bsqueda (nodo izq., valor)
Sino Si valor > nodo info.
Entonces Bsqueda (nodo der., valor)
Sino escribir (nodo existe)
Fin
Fin
Sino escribir (Nodo no se encuentra en el rbol)

Fin. Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
INSERCION EN UN ARBOL BINARIO DE
BUSQUEDA

Debe compararse la clave a insertar con la raz del rbol. Si es


mayor, debe comenzarse hacia el subrbol derecho. Si es menor
debe comenzarse hacia el subrbol izquierdo.

Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las


siguientes condiciones:

el subrbol derecho es igual a vaco. El subrbol izquierdo es


igual a vaco, en cuyo caso se proceder a insertar el elemento
en el lugar que le corresponde.
La clave que quiere insertarse es igual a la raz del rbol; en
cuyo caso no se realiza la insercin.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
INSERCION EN UN ARBOL BINARIO DE
BUSQUEDA
Algoritmo
Si nodo <> Nil Entonces
Si valor < nodo info.
Entonces Insercin (nodo izq., valor)
Sino Si valor > nodo info.
Entonces Insercin (nodo der., valor)
Sino escribir (nodo existe)
Fin
Fin
Sino { crear (nuevo nodo)
Hacer nuevo nodo izq. = Nil;
Hacer nuevo nodo der. = Nil;
Nuevo nodo info. = valor;
Nodo = nuevo nodo}
Fin. Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
INSERCION EN UN ARBOL BINARIO DE
BUSQUEDA
Ejemplo: Supngase que se quiere insertar los siguientes valores en un
rbol binario de bsqueda que se encuentra vaco.
95 80 72 60 82 81 84 100 110 105

Y as sucesivamente hasta que se agoten los valores.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
ELIMINACION EN UN ARBOL BINARIO
DE BUSQUEDA

Se debe distinguir los siguientes casos:

Si el nodo a borrar es terminal u hoja simplemente se suprime.


Si el nodo a borrar tiene un solo descendiente, entonces tiene que
sustituirse por ese descendiente.
Si el nodo a borrar tiene los dos descendientes entonces se tiene
que sustituir por el nodo que se encuentra ms a la izquierda en el
subrbol derecho o por el nodo que se encuentra ms a la derecha
en el subrbol izquierdo.

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Algoritmo Eliminacion(nodo,infor)
1. Si nodo <> Nil Entonces
1.1 Si infor < nodo info.
Entonces Eliminacin (nodo izq, infor)
Sino
1.1.1 Si infor > nodo info
Entonces Eliminacin (nodo der, infor)
Sino hacer otro nodo
1.1.1.A Si otro der = NULL
Entonces hacer nodo otro izq
1.1.1. BSino Si otro izq = NULL
Entonces hacer nodo otro der
Sino hacer Aux otro izq Y Aux1 Aux
1.1.1. CRepetir mientras Aux der <> NULL
Hacer Aux1 Aux y Aux Aux der
Fin.
Hacer otro info Aux info
otro aux Y Aux1 der Aux izq.
Fin (condicional del paso 1.1.1. B)
Fin (condicional del paso 1.1.1. A)
Fin (condicional del paso 1.1.1)
Fin (condicional del paso 1.1)
Quita (otro) {libera la memoria del nodo}
Sino escribir (el nodo no se encuentra en el rbol)
Fin Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
Ejemplo: Supngase que se desea eliminar las siguientes claves del
rbol binario de bsqueda:
Claves: 22 99 87 120

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Eliminacin clave: 22

Eliminacin clave: 99

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
Eliminacin clave: 87

Eliminacin clave: 120

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL
BINARIO DE BSQUEDA UTILIZANDO STRUCT

DEFINICIN

#define NULL 0

struct nodo
{
struct nodo *izq;
tipo info;
struct nodo *der;
};

Con esta definicin de ArbolBB las operaciones asociadas especificadas


en el TAD quedaran del siguiente modo:

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL
BINARIO DE BSQUEDA UTILIZANDO STRUCT

Inicializa el rbol Binario de bsqueda a travs del apuntador raz.

void CrearArbolBB (struct nodo **raiz)


{

(*raiz)=NULL;

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL
BINARIO DE BSQUEDA UTILIZANDO STRUCT
void InsercionValorArbol (struct nodo **raiz, int valor)
{
if ((*raiz)!=NULL)

if (valor<((*raiz)->info)) InsercionValorArbol(&((*raiz)->izq),valor);

else if (valor>((*raiz)->info)) InsercionValorArbol(&((*raiz)->der),valor);

else cout << "El nodo existe en el arbol\n";

else
{ struct nodo *n;

n=new nodo;
n->izq=NULL;
n->der=NULL;
n->info=valor;
(*raiz)=n;
}
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL
BINARIO DE BSQUEDA UTILIZANDO STRUCT
void EliminacionValorArbol (struct nodo **raiz, int valor)
{
struct nodo *Otro, *Aux, *Aux1;
Otro=new nodo; Aux=new nodo; Aux1=new nodo;

if ((*raiz)!=NULL)
{
if (valor<((*raiz)->info)) EliminacionValorArbol(&((*raiz)->izq),valor);

else if (valor>((*raiz)->info)) EliminacionValorArbol(&((*raiz)->der),valor);

else { Otro=*raiz;
if ((Otro->der)==NULL) (*raiz)=Otro->izq;

else { if ((Otro->izq)==NULL) (*raiz)=(Otro->der);

else { Aux=(Otro->izq);
Aux1=Aux;
while ((Aux->der)!=NULL)
{ Aux1=Aux;
Aux=(Aux->der);
}
(Otro->info)=(Aux->info);
Otro=Aux;
(Aux1->der)=(Aux->izq);
}
delete(Otro); Ing. M.Sc. Fulbia Torres
}
else cout << "El nodo no se encuentra en el arbol\n";
Asignatura: Estructuras de Datos
} Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL
BINARIO DE BSQUEDA UTILIZANDO STRUCT
Recorridos en el rbol binario

void RecorrerPreOrdenArbol (struct nodo **raiz)


{
if ((*raiz)!=NULL)
{
cout << " " << (*raiz)->info;
RecorrerPreOrdenArbol(&((*raiz)->izq));
RecorrerPreOrdenArbol(&((*raiz)->der));
}
}

void RecorrerInOrdenArbol (struct nodo **raiz)


{
if ((*raiz)!=NULL)
{
RecorrerInOrdenArbol (&((*raiz)->izq));
cout << " << (*raiz)->info;
RecorrerInOrdenArbol (&((*raiz)->der));
}
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL
BINARIO DE BSQUEDA UTILIZANDO STRUCT

Recorridos en el rbol binario

void RecorrerPostOrdenArbol (struct nodo **raiz)


{
if ((*raiz)!=NULL)
{
RecorrerPostOrdenArbol (&((*raiz)->izq));
RecorrerPostOrdenArbol (&((*raiz)->der));
cout << " " << (*raiz)->info;
}
}

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIN DINMICA DEL RBOL
BINARIO DE BSQUEDA UTILIZANDO STRUCT

Busca un elemento en el rbol binario de bsqueda

void BusquedaValorArbol (struct nodo **raiz, int valor)


{
if ((*raiz)!=NULL)

if (valor<((*raiz)->info)) BusquedaValorArbol(&((*raiz)->izq),valor);

else
if (valor>((*raiz)->info)) BusquedaValorArbol(&((*raiz)->der),valor);

else cout << "El nodo existe\n";

else
cout << "El nodo no se encuentra en el arbol\n";

Ing. M.Sc. Fulbia Torres


Asignatura: Estructuras de Datos
Barquisimeto 2006
GRACIAS POR SU
ATENCIN

HASTA LA PRXIMA
CLASE

También podría gustarte