Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Arboles
Arboles
Centro de Estudio de Ingeniera de Sistemas (CEIS) Instituto Superior Politcnico Jos Antonio Echeverra (CUJAE)
Tema 3: rboles
Contenido Definicin de rbol rboles Binarios Recorridos en rboles binarios rboles de bsqueda: rboles lexicogrficos rboles hilvanados Implementacin en un lenguaje de programacin
Tema 3: rboles
Contenido rboles generales Transformacin de rboles generales en binarios Implementacin en un lenguaje de programacin Colocacin secuencial de rboles
Bibliografa
Data Structures / Algorithms in Java. Robert Lafore. Pginas: 280-370
Thinking in Java. Pginas: 395-445. Aprenda Java como si estuviera en primero. Pginas: 135-139. Aprenda Java en 21 das. Pginas: 135-151. El C++. Lenguaje de Programacin. Bjarne Stroustrup. Pginas 143-180 :.
Objetivos
Conozcan las estructuras de datos arbreas y las formas de trabajar con ellas en la solucin de problemas de mediana complejidad
Introduccin
Estructuras de datos estudiadas: Listas lineales y sus variantes. Las relaciones entre los nodos de informacin son lineales. Todos los nodos tienen un nico antecesor, excepto el primero que no tiene antecesor. Todos los nodos tienen un nico sucesor, excepto el ltimo que no tiene sucesor.
Introduccin
?
Ejemplo:
Director SubDir1 SubDir2 SubDir3
JDpto1
JDpto2
JDpto3
JDpto4
JDpto5
Definicin de rbol
Un rbol (tree) es un T.D.A. que consta de un A conjunto finito T de nodos y una relacin R (paternidad) entre los nodos tal que: C B Hay un nodo, especialmente designado, llamado la A raz del rbol T. G E F D Los nodos restantes, excluyendo A raz, son la C B particionados en m (m u 0) conjuntos disjuntos T1, T2, C B ..., Tm, cada uno de los cuales es, a su vez, un rbol, G E llamado subrbol de la raz del rbol T. F D G A los nodos que no son D races E otros subrboles de F se les denomina hojas del rbol T, o sea, no tienen sucesores o hijos.
Definicin de rbol
Si n es un nodo y A1, A2, A3, A4, A5, , Ak son rboles con races n1, n2, n3, n4,, nk . Se puede construir un nuevo rbol haciendo que n se constituya en padre de los nodos n1, n2, n3, n4,, nk. En dicho rbol, n es la raz y A1, A2, A3, A4, A5, , Ak son los subrboles de la raz. Los nodos n1, n2, n3, n4,, nk reciben el nombre de hijos del nodo n.
Aclaraciones
Si el conjunto finito T de nodos del rbol es vaco, entonces se trata de un rbol vaco. En esta estructura existe slo un nodo sin padre, que es la raz del rbol. Todo nodo, a excepcin del nodo raz, tiene uno y slo un padre. Los subrboles de un nodo son llamados hijos.
Ejemplos
A B D E F C G Padre de C: Padre de E: Padre de G Padre de A: Hijos de A: Hijos de C: Hijos de F: A B C NO B F NO C G
Aclaraciones
Para todo nodo k, distinto de la raz, existe una nica secuencia de la forma: k0, k1, k2, k3, ..., kn, donde k0=raz y kn=k Con n >= 1, donde. ki es el sucesor de ki-1, para 1 <= i <= n, o sea, cada nodo ki de la secuencia es la raz de otro subrbol.
Ejemplos
A B D E F C G Secuencias de A a G de A a E de A a F C es sucesor de A y F es sucesor de C
Otras definiciones
Grado de un nodo: cantidad de hijos de un nodo. Grado de un rbol al mayor de los grados de todos sus nodos. Nodo hoja a un nodo sin hijos o con grado = 0. Nodo rama a un nodo que tiene hijos, o sea, a la raz de un subrbol.
Ejemplos
A B D H E I F J C G K Grado de A: de E: de G: de J: 2 3 1 0
Otras definiciones
Nivel de un nodo al nivel de su padre ms uno. Por definicin, la raz del rbol tiene nivel 0. Esta definicin es recursiva.
Ejemplos
A B D E F I C G Nivel de A: de E: de B: de I: H de G: 0 2 1 3 2
Otras definiciones
rbol completo de nivel n a un rbol en el que cada nodo de nivel n es una hoja y cada nodo de nivel menor que n tiene, al menos, un subrbol no vaco.
Ejemplos
A B D E F C G D B E A C
Otras definiciones
Padre de un nodo al nodo raz del subrbol ms pequeo que contiene a dicho nodo y en el cual l no es raz. Hijo de un nodo al (los) nodo(s) raz(ces) de uno de sus subrboles. Predecesor de un nodo al nodo que le antecede en un recorrido del rbol. Hermano de un nodo a otro nodo hijo de su padre.
Ejemplos
A B D E C F G Padre de G: C F H G J
Hijos de C: E Hermanos de I:
Otras definiciones
rbol ordenado a todo rbol para el que se considera el orden relativo de los sucesores o subrboles de cualquier nodo. Es decir, en un rbol ordenado se habla de primero, segundo o ltimo hijo de un nodo en particular. El primer hijo de un nodo de un rbol ordenado es denominado el hijo mayor de ese nodo y el ltimo hijo es denominado el menor. El rbol es ordenado si al intercambiar el orden relativo de los subrboles de un nodo, representa una situacin semnticamente diferente.
Otras definiciones
rbol orientado a un rbol para el cual no interesa el orden relativo de los sucesores o subrboles de cualquier nodo, ya que slo se tiene en cuenta la orientacin de los nodos. Ejemplo: La estructura organizativa de una empresa, donde no es importante el orden de los subdirectores a la hora de representarlos en el rbol. En la solucin de problemas informticos, los ms utilizados son los rboles ordenados.
Otras definiciones
Una floresta es una coleccin de dos o ms rboles disjuntos. Aclaraciones: Disjuntos significa que no hay nodos en comn entre dos rboles cualesquiera de la misma. De un rbol se obtiene una floresta al quitarle la raz, si tiene dos hijos o ms. De una floresta se obtiene un rbol al aadir un nodo que sea raz de todos los rboles que la conforman.
Ejemplos
A B D E C F G D B E B F G
NO es una floresta
Ejemplo
Mara Juan Luisa Lisa
El rbol genealgico es un rbol binario. Cada nodo tiene dos hijos Es significativo el orden de los subrboles.
Hijo Izquierdo
Hijo Derecho
Recorrido en Preorden
1. Visitar la raz. 2. Recorrer subrbol izquierdo en preorden. 3. Recorrer subrbol derecho en preorden.
Recorrido en Preorden
A B D E F C G
Recorrido en Simtrico
1. Recorrer subrbol izquierdo en simtrico. 2. Visitar la raz. 3. Recorrer subrbol derecho en simtrico.
Recorrido en Simtrico
A B D E F C G
Recorrido en Postorden
1. Recorrer subrbol izquierdo en orden final. 2. Recorrer subrbol derecho en orden final. 3. Visitar la raz.
Recorrido en Simtrico
A B D E F C G
Recorrido D E B F G C A 1. Subrbol izquierdo en orden final. 2. Subrbol derecho en orden final. 3. Raz.
rboles de Bsqueda
Permiten realizar operaciones (recorridos, bsqueda de un elemento, etc) de forma ms eficiente. Hay dos momentos para la manipulacin de un rbol: La construccin del rbol. El recorrido del rbol para realizar las operaciones requeridas segn el problema a resolver. Existen dos tipos especiales de rboles: rboles lexicogrficos. rboles hilvanados.
rboles Lexicogrficos
Un rbol lexicogrfico es un rbol binario que, recorrido en orden simtrico, permite obtener la informacin de los nodos en algn criterio de ordenamiento. La tcnica de construccin de un rbol lexicogrfico consiste en un proceso recursivo que va colocando los nodos en el subrbol izquierdo o derecho del nodo raz, segn sea el criterio de ordenamiento deseado (ascendente o descendente).
rboles Lexicogrficos
Siguiendo un ordenamiento ascendente: 1. Se compara el nodo que se quiere insertar con la raz del rbol. Si es menor, se coloca en el subrbol izquierdo siguiendo el mismo proceso. Si es mayor, se coloca en el subrbol derecho siguiendo el mismo proceso.
Problemas
El recorrido de rboles con programas recursivos resulta costoso ya que implica un gasto adicional de memoria y tiempo de ejecucin. Para rboles muy grandes se puede desbordar el stack del sistema relativamente pronto.
?
Cul es la solucin?
rboles hilvanados
rboles Hilvanados
Un rbol hilvanado (o rbol entrelazado) es un rbol binario en el que cada hijo izquierdo de valor nulo es sustituido por un enlace o hilvn al nodo que le antecede en orden simtrico (excepto el primer nodo en orden simtrico) y cada hijo derecho de valor nulo es sustituido por un enlace o hilvn al nodo que le sigue en el recorrido en orden simtrico (excepto el ltimo nodo en orden simtrico).
rboles Hilvanados
Ahora, un recorrido en orden simtrico se puede implementar sin necesidad de recursin. Sin embargo, se requiere que los nodos tengan en su estructura algn atributo que permita saber cundo un enlace es real y cundo se trata de un hilvn. En este caso es necesario un atributo para cada hijo.
rbol Hilvanado
Cada nodo del rbol hilvanado contiene: Una referencia a su informacin. Un apuntador a su hijo izquierdo. Indicador Izquierdo (Verdadero o Falso). Un apuntador a su hijo derecho. Indicador Derecho (Verdadero o Falso).
5
Informacin
T
rboles Hilvanados
5 T T
Recorrido Simtrico: 1, 3, 4, 5, 6, 8, 9
3 T T T
8 T
NULL
NULL
A B C F
F
T NULL D F T NULL
D E
NULL
NULL B T T F
C F T F
E T
F F F
NULL
rboles Balanceados
La bsqueda en un rbol lexicogrfico puede convertirse en una bsqueda secuencial. Esto sucede porque el rbol no est balanceado, es decir los nodos no estn distribuidos uniformemente y se han insertado todos los nodos en profundidad. Esto podra ser salvado si se utilizara un rbol balanceado que al insertar toma en cuenta la cantidad de niveles del rbol y distribuye los nodos uniformemente.
rboles Balanceados
Los rboles balanceados (B-Tree) son rboles en los que cada nodo tiene entradas del mismo tipo. Un rbol balanceado no es un rbol de bsqueda binario, pues cada nodo puede tener ms de dos hijos.
rboles AVL
Un rbol AVL es un rbol binario de bsqueda en el que las alturas de los subrboles izquierdo y derecho de cualquier nodo se diferencian a lo sumo en uno. La bsqueda es similar a como se hace en un rbol binario de bsqueda (lexicogrficos), pero la insercin y la eliminacin deben considerar la propiedad del balance.
rboles Generales
Director SubDir1 SubDir2 SubDir3
JDpto1 ?
JDpto2
JDpto3
JDpto4
JDpto5
rboles Generales
Son rboles cuyo grado es mayor que dos.
Cmo representarlos?
rboles Generales
1 Por cada nodo: la informacin y una lista de referencias a cada uno de sus hijos.
Secuencial: Se pierde espacio, cada nodo tiene un agrado diferente. Enlazada: la manipulacin de la lista de hijos se hace difcil.
rboles Generales
2 Transformar el rbol general en binario Cada nodo tiene en su enlace izquierdo a su primer hijo en el general y a la derecha de un nodo van sus hermanos en el general. Aclaraciones: El rbol se convierte en binario donde el enlace izquierdo representa al primer hijo (en el rbol general) y el enlace derecho al siguiente hermano (en el rbol general). El rbol es ordenado porque a la izquierda est su primer hijo (si lo tiene) y a la derecha estarn sus hermanos (si los tiene) con sus descendientes.
N - cantidad de rboles de la floresta. Si N=0 entonces el rbol binario es vaco. Si N>0 - raz del binario es raz del 1er rbol. Hijo izquierdo sus descendientes. Hijo derecho, la raz del 2do rbol.
1 Se puede colocar secuencialmente un rbol? Si 2 Cundo colocar secuencialmente un rbol? Cuando debe recorrerse en mltiples ocasiones y no sufre frecuentes inserciones y/o eliminaciones. Ejemplo: una frmula que debe ser evaluada muchas veces.
Los mtodos ms conocidos son: Almacenamiento en Preorden Secuencial. Almacenamiento en Orden Familiar. Almacenamiento en Postorden Secuencial.
TERM
A B C D
Implementacin en C++
typedef int TIndex; class TPreOrderNode { private: void* aInfo; TIndex aRightLink; bool aEnd; public: TPreOrderNode(void* pInfo, bool pEnd) : aInfo(pInfo), aRightLink (-1), aEnd(pEnd){} void* Info() {return aInfo;} TIndex RightLink () {return aRightLink;} void RightLink(TIndex pRightLink) {aRightLink = pRightLink;} bool End() {return aEnd;} };
A B C D
Implementacin en C++
class TFamilyNode { private: void* aInfo; TIndex aLeftLink; bool aFamily; public: TFamilyNode(void* pInfo, bool pFamily) : aInfo(pInfo), aLeftLink(-1), aFamily(pFamily){} void* Info() {return aInfo;} TIndex LeftLink () {return aLeftLink;} void LeftLink (TIndex pLeftLink) {aLeftLink = pLeftLink;} bool Family() {return aFamily;} };
A B C D
E F
B G C H
D A
Implementacin en C++
class TPostOrderNode { private: void* aInfo; int aDegree; public: TPostOrderNode(void* pInfo, int pDegree) : aInfo(pInfo), aDegree(pDegree){} void* Info() {return aInfo;} int Degree() {return aDegree;} };