Download Clases de Arboles

Document related concepts

Árbol binario wikipedia , lookup

Recorrido de árboles wikipedia , lookup

Árbol binario de búsqueda wikipedia , lookup

Rotación de árboles wikipedia , lookup

Treap wikipedia , lookup

Transcript
ARBOLES
ESTRUCTURAS DE DATOS
2006
DEFINICION
Un árbol (tree) es un conjunto finito de
nodos.
Es una estructura jerárquica
aplicable sobre una colección de elementos
u objetos llamados nodos; uno de los cuales
es conocido como raíz.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
Los árboles representan las estructuras no
lineales y dinámicas. No lineales, puesto
que a cada elemento del árbol pueden
Dinámicas,
seguirle varios elementos.
puesto que la estructura árbol puede
cambiar durante la ejecución 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 vacío, tiene un único nodo raíz.
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 raíz, 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 número de descendientes directos de un
determinado nodo. Grado del árbol es el máximo grado de todos
los nodos del árbol.
Nivel es el número de arcos que deben ser recorridos para
llegar a un determinado nodo. Por definición la raíz tiene nivel 1.
Altura del árbol es el máximo número de niveles de todos los
nodos del árbol.
Rama es un camino desde el nodo raíz a una hoja.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
Figura 2 :Árbol General
A raíz del árbol
B es el hijo de A. C es hijo de A.
B es padre de D. D es padre de I.
B y C son hermanos. D, E, F son hermanos.
I, E, J, K, G, L son hojas.
B, D, F, C y H son nodos interiores.
Nivel del nodo A es 1. Nivel del nodo E es 3.
La altura del árbol es 4.
El grado de nodo A es 2
El grado de nodo B es 3
El grado de nodo C es 2
El grado de nodo D es 1
El grado de nodo E es 0
Grado del árbol es 3
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
ÁRBOLES BINARIOS
Definición 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.
Definición 2:
Un árbol binario es un conjunto finito de nodos, el cual puede ser vacío
o un conjunto que consta de un nodo raíz enlazado a dos árboles
binarios disjuntos denominados subárbol izquierdo y subárbol derecho.
Figura 3 :Árboles Binarios
Ing. M.Sc. Fulbia Torres
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 raíz se dice que está en el nivel O en el árbol. Los nodos B y
C están en el nivel 1. (figura 4)
Altura del árbol se define como el nivel más alto del árbol. En la
figura 4 la altura del árbol es 2.
Figura 4 :Árbol Binario
Ing. M.Sc. Fulbia Torres
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 subárboles izquierdo y derecho de un árbol binario deben ser
subconjuntos disjuntos, esto es, ningún nodo puede estar en ambos
subárboles. Ejemplo:
(b)
(a)
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
idénticas, pero la información 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 además los
nodos contienen la misma información.
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 subárbol izquierdo y el subárbol
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 conversión 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 más 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 : Conversión 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 raíz, si ésta es
distinta de vacío 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 vacío), 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 dinámicas.
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 serán representadas como registros, que
contendrán como mínimo tres campos. En un campo se almacenará la
información del nodo. Los dos restantes se utilizarán para apuntar los
subárboles izquierdo y derecho respectivamente del nodo en cuestión.
Dado el siguiente nodo T:
Donde:
IZQ: campo donde se almacena la dirección del subárbol izquierdo del
nodo T.
INFO: campo donde se almacena la información de interés del nodo.
DER: campo donde se almacena la dirección del subárbol 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 definición de un árbol binario en lenguaje algorítmico es como sigue.
Enlace = ˆ nodo
Nodo = registro
IZQ: tipo enlace
INFO: tipo dato
DER: tipo enlace
{Fin de la definición}
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 : Representación de un árbol
binario en memoria. (a) Árbol binario. (b)
Árbol binario representación 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 : Representación de un árbol
binario en memoria. (a) Árbol binario. (b)
Árbol binario representación 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 número 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 EXPRESIÓN
Los árboles binarios se utilizan para representar expresiones en
memoria, esencialmente en compiladores de lenguajes de programación
CONSTRUCCION DE ÁRBOLES DE EXPRESION
Los paréntesis no se almacenan en el árbol pero
están implicados en la forma del árbol. Si se supone que todos los
operadores tienen dos operandos, se puede representar una expresión
por un árbol binario cuya raíz contiene un operador y cuyos subárboles
izquierdo y derecho son los operandos izq. y der. respectivamente.
Cada operando puede ser una letra o una subexpresión representada
como un subárbol. Todos los operandos letras se almacenan en nodos
hojas.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
ÁRBOLES DE EXPRESIÓN
Ejemplo 1: Dada la expresión (X+Y) * (A-B) construir el árbol de
expresión.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
ÁRBOLES DE EXPRESIÓN
Ejemplo 3: Deducir la expresión 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 sistemática, 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 raíz (escribir la información del nodo).
Recorrer el subárbol izquierdo en preorden.
Recorrer el subárbol 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 nodo→Info)
Regresar a Preorden con (nodo→Izq)
Regresar a Preorden con (nodo→der) }
Fin.
El valor en cada nodo es procesado conforme se pasa por cada nodo.
Después de que se procese el valor de un nodo dado, son procesados
los valores del subárbol izquierdo y a continuación los valores en el
subárbol derecho.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
RECORRIDOS EN ÁRBOLES BINARIOS
RECORRIDO EN INORDEN
Recorrer el subárbol izquierdo en Inorden
Visitar raíz (procesar el valor en el nodo).
Recorrer el subárbol 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 (nodo→Izq)
Visitar el nodo (escribir nodo→Info)
Regresar a Inorden con (nodo→der) }
Fin.
El valor en un nodo no es procesado en tanto no sean procesados los
valores de su subárbol izquierdo.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
RECORRIDOS EN ÁRBOLES BINARIOS
RECORRIDO EN POSORDEN
Recorrer el subárbol izquierdo en Posorden
Recorrer el subárbol derecho en Posorden
Visitar raíz (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 (nodo→Izq)
Regresar a Posorden con (nodo→der)
Visitar el nodo (escribir nodo→Info) }
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
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL
BINARIO UTILIZANDO STRUCT
DEFINICIÓN
#define NULL 0
struct nodo
{
struct nodo *izq;
tipo info;
struct nodo *der;
};
Con esta definición de ArbolB las operaciones asociadas especificadas
en el TAD quedarían del siguiente modo:
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL
BINARIO UTILIZANDO STRUCT
Inicializa el Árbol Binario a través del apuntador raíz.
void InicializarArbolB (struct nodo **raiz)
{
(*raiz)=NULL;
}
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL BINARIO
UTILIZANDO STRUCT
Crea un Árbol Binario con un solo nodo, el nodo Raíz.
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
IMPLEMENTACIÓN DINÁMICA 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 raíz contiene el valor de tipo base y en el
que los árboles originales pasan a ser subárboles 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
IMPLEMENTACIÓN DINÁMICA 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
IMPLEMENTACIÓN DINÁMICA 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
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL BINARIO
UTILIZANDO STRUCT
Dado un Árbol, elimina el nodo cuya dirección se envía como
parámetro 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;
}
delete temp;
}
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL BINARIO
UTILIZANDO STRUCT
Dado un Árbol Binario devuelve la información almacenada en su nodo
raíz.
int DatoRaiz(struct nodo *p)
{
return p->info;
}
Devuelve el valor verdadero si el Árbol Binario está vacío y falso en
caso contrario.
bool ArbolBVacio(void)
{
return (raiz==NULL);
}
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIÓN DINÁMICA 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
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL BINARIO
UTILIZANDO STRUCT
Permite que una vez que no se requiera más de la utilización 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
IMPLEMENTACIÓN DINÁMICA 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
IMPLEMENTACIÓN DINÁMICA 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
IMPLEMENTACIÓN DINÁMICA 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 búsqueda (que no tiene los valores duplicados de
nodos) tienen la característica que los valores en cualquier subárbol
izquierdo son menores que el valor en sus nodos padres y los valores
en cualquier subárbol 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 números: 8 3 1 20 10 5 4 en un
árbol binario de búsqueda. 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 vacío y se le debe
insertar el 8.
A continuación viene el 3. Ya que 3 es menor que 8, el 3 debe ir en el
subárbol izquierdo.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
CREACION DE UN ARBOL BINARIO DE
BUSQUEDA
A continuación viene el 3. Ya que 3 es menor que 8, el 3 debe ir en el
subárbol izquierdo.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
CREACION DE UN ARBOL BINARIO DE
BUSQUEDA
A continuación 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 fácilmente.
Una propiedad de los árboles binarios de búsqueda 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 BÚSQUEDA 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 raíz y los siguientes son
nodo raíz de los demás.
Se busca en el inorden ese nodo raíz y se divide en subárbol izquierdo y
derecho.
En el preorden se busca el siguiente nodo raíz y en el inorden los
subárboles 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 búsqueda correspondiente.
•
Se busca en el preorden el primer elemento que es nodo raíz.
•
Se busca en el inorden ese valor y se divide en subárbol izquierdo y
derecho.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
•
Se busca en el preorden el siguiente nodo raíz y se subdivide en
subárbol 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 búsqueda correspondiente.
•
Se busca en el posorden el último valor que es el nodo raíz.
•
Se busca en inorden el valor y se divide en subárbol izquierdo y
derecho.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
•
Se busca en posorden siguiente nodo raíz que es 42.
•
Se busca en posorden siguiente nodo raíz que es 13.
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
OPERACIONES DE BÚSQUEDA,
INSERCCION Y ELIMINACION
El árbol binario de búsqueda es una estructura sobre la cual se pueden
realizar eficientemente las operaciones de búsqueda, inserción y
eliminación.
Búsqueda (nodo, valor)
Algoritmo
Si nodo <> Nil
Entonces Si valor < nodo → info.
Entonces Búsqueda (nodo → izq., valor)
Sino Si valor > nodo → info.
Entonces Búsqueda (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 raíz del árbol. Si es
mayor, debe comenzarse hacia el subárbol derecho. Si es menor
debe comenzarse hacia el subárbol izquierdo.
•
Repetir sucesivamente el paso 1 hasta que se cumpla alguna de las
siguientes condiciones:
– el subárbol derecho es igual a vacío. El subárbol izquierdo es
igual a vacío, en cuyo caso se procederá a insertar el elemento
en el lugar que le corresponde.
– La clave que quiere insertarse es igual a la raíz del árbol; en
cuyo caso no se realiza la inserción.
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 Inserción (nodo → izq., valor)
Sino Si valor > nodo → info.
Entonces Inserción (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: Supóngase que se quiere insertar los siguientes valores en un
árbol binario de búsqueda que se encuentra vacío.
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 más a la izquierda en el
subárbol derecho o por el nodo que se encuentra más a la derecha
en el subárbol 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 Eliminación (nodo → izq, infor)
Sino
1.1.1 Si infor > nodo → info
Entonces Eliminación (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”)
Ing. M.Sc. Fulbia Torres
Fin
Asignatura: Estructuras de Datos
Barquisimeto 2006
Ejemplo: Supóngase que se desea eliminar las siguientes claves del
árbol binario de búsqueda:
Claves: 22 – 99 – 87 – 120
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
Eliminación clave: 22
Eliminación clave: 99
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
Eliminación clave: 87
Eliminación clave: 120
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL
BINARIO DE BÚSQUEDA UTILIZANDO STRUCT
DEFINICIÓN
#define NULL 0
struct nodo
{
struct nodo *izq;
tipo info;
struct nodo *der;
};
Con esta definición de ArbolBB las operaciones asociadas especificadas
en el TAD quedarían del siguiente modo:
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL
BINARIO DE BÚSQUEDA UTILIZANDO STRUCT
Inicializa el Árbol Binario de búsqueda a través del apuntador raíz.
void CrearArbolBB (struct nodo **raiz)
{
(*raiz)=NULL;
}
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL
BINARIO DE BÚSQUEDA 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
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL
BINARIO DE BÚSQUEDA 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);
}
else cout << "El nodo no se encuentra en el arbol\n";
}
Ing. M.Sc. Fulbia Torres
Asignatura: Estructuras de Datos
Barquisimeto 2006
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL
BINARIO DE BÚSQUEDA 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
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL
BINARIO DE BÚSQUEDA 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
IMPLEMENTACIÓN DINÁMICA DEL ÁRBOL
BINARIO DE BÚSQUEDA UTILIZANDO STRUCT
Busca un elemento en el árbol binario de búsqueda
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
ATENCIÓN
HASTA LA PRÓXIMA
CLASE