Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Concepto
Nodo:
Árbol:
Se define formalmente como una estructura finita formada por un nodo al cual están
conectados ninguno, uno o más árboles disjuntos (no comparten elementos). Definición
recursiva: lo definido se encuentra dentro de la definición.
ARBOL BINARIO
La altura de un nodo en un arbol se define como la longitud del camino más largo que
comienza en el nodo y termina en una hoja.
La altura de un nodo hoja será de cero, y la altura de un nodo se puede calcular sumando
uno a la mayor altura de sus hijos.
• La profundidad de un nodo se define como la longitud del camino (único) que comienza
en la raíz y termina en el nodo.
Las operaciones principales son el acceso al nodo padre, a los nodos hijos, la inserción y
borrado de subárboles hijos y el cambio del cursor.
• Recorrido Preorden: Se actua sobre la raiz y luego se recorre en preorden cada uno de los
subárboles.
• Recorrido Postorden: Se recorre en postorden cada uno de los subárboles y luego se actua
sobre la raiz.
• Recorrido Inorden: Se recorre en inorden el primer subárbol (si existe). A continuación se
actua sobre la raiz y por último se recorre en inorden cada uno de los subárboles restantes.
Altura: Es el nivel de la hoja en el camino mas largo desde la raíz mas 1. Por definición, la
altura de un árbol vacío es -1
Orden: Número potencial de hijos que puede tener cada elemento de un árbol.
Los árboles binarios pueden ser construidos a partir de lenguajes de programación de varias
formas. En un lenguaje con registros y referencias, los árboles binarios son construidos
típicamente 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, también 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.
Los árboles binarios también pueden ser almacenados como una estructura de datos
implícita en vectores, y si el árbol es un árbol binario completo, este método no
desaprovecha el espacio en memoria.
Tomaremos como notación 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 raíz tenga índice cero).
Este método tiene como ventajas el tener almacenados los datos de forma más compacta y
por tener una forma más rápida y eficiente de localizar los datos en particular durante un
preorden transversal. Sin embargo, desperdicia mucho espacio en memoria.
Hay un mapeo uno a uno entre los árboles generales y árboles binarios, el cual en
particular es usado en Lisp para representar árboles generales como árboles binarios.
Cada nodo N ordenado en el árbol corresponde a un nodo N' en el árbol binario; el hijo de
la izquierda de N’ es el nodo correspondiente al primer hijo de N, y el hijo derecho de N' es
el nodo correspondiente al siguiente hermano de N, es decir, el próximo nodo en orden
entre los hijos de los padres de N.
Esta representación como árbol binario de un árbol general, se conoce a veces como un
árbol binario primer hijo hermano, o un árbol doblemente encadenado.
Una manera de pensar acerca de esto es que los hijos de cada nodo estén en una lista
enlazada, encadenados junto con el campo derecho, y el nodo solo tiene un puntero al
comienzo o la cabeza de esta lista, a través de su campo izquierdo.
Por ejemplo, en el árbol de la izquierda, la A tiene 6 hijos (B, C, D, E, F, G). Puede ser
convertido en el árbol binario de la derecha:
El árbol binario puede ser pensado como el árbol original inclinado hacia los lados, con los
bordes negros izquierdos representando el primer hijo y los azules representado los
siguientes hermanos.
Que se ejecutará en la memoria como el árbol binario de la derecha, sin ningún tipo de
letras en aquellos nodos que tienen un hijo izquierdo.
Un árbol binomial de orden k ( Bk ) tiene un nodo raíz cuyos hijos son raíces de árboles
binomiales de orden k-1, k-2… 2, 1, 0 en ese orden.
Observe que la definición 2 es similar a decir que un árbol binomial de orden k está
formado por la unión de dos árboles binomiales de orden k-1 donde la raíz de uno de ellos
es el hijo más a la izquierda del otro.
2k nodos
Altura k
nodos a la profundidad i. (el nombre proviene de esta propiedad, ver Coeficientes
Binomiales)
La primera propiedad asegura que la raíz de cada árbol binomial contiene la menor llave de
ese árbol, y la segunda que un Heap Binomial de n nodos posee a lo sumo log n + 1
Árboles Binomiales. De hecho, el número y orden de los árboles está determinado por la
cantidad de nodos. Cada Árbol Binomial se corresponde con un dígito en la representación
binaria de n. Por ejemplo para n =13 su número binario es 1101, o sea:13=23+22+20
Entonces un Heap Binomial con 13 nodos poseería 3 árboles binomiales de órdenes 3,2 y 0
Como el nodo raíz de cada uno posee el elemento mínimo de ese árbol, comparando las
dos raíces se puede decidir la raíz del nuevo árbol (la menor de las dos).
Si solo uno de los heaps contiene el árbol binomial de orden k este se agrega al nuevo heap
y se pasa al siguiente orden.
Si los dos heaps contienen un árbol binomial de orden k se mezclan estos dos árboles
mediante el procedimiento anterior y se obtiene un árbol de orden k+1 (Note que es posible
que este árbol nuevo surgido de la mezcla sea nuevamente mezclado con otro árbol de
orden k+1 ya existente en alguno de los dos heaps).
Heap solo garantiza que los elementos en niveles superiores sean mayores (para max-heap)
o más pequeños (para min-heap) que los elementos en niveles inferiores, mientras que BST
garantiza el orden (de "izquierda" a "derecha"). Si desea elementos ordenados, vaya con
BST.
Heap es mejor en findMin / findMax (O (1)), mientras que BST es bueno en todos los
hallazgos (O (logN)). Insertar es O (logN) para ambas estructuras. Si solo le importa
findMin / findMax (por ejemplo, relacionado con la prioridad), vaya con heap. Si quieres
todo ordenado, ve con BST.
CONCLUSION
Los árboles a diferencia de las listas son una estructura de datos de no lineal, atendiendo
más a una estructura de tipo jerárquico. Los árboles son, sin duda, una de las estructuras de
datos no lineales, empleadas en informática, tanto para resolver problemas de hardware
como de software. Los árboles de directorios son organizaciones bastante empleadas por
cualquier usuario o programador de una computadora. De igual manera cumplen un buen
papel en la toma de decisiones, valido como árbol de decisiones.
Los árboles genealógicos y los organigramas son ejemplos comunes. Entre otras
aplicaciones, los árboles se emplean para analizar circuitos eléctricos y para representar la
estructura de fórmulas matemáticas, así como para organizar la información de bases de
datos, para representar la estructura sintáctica de un programa fuente en compiladores y
para la toma de decisiones.
Un árbol binario se puede modificar fácilmente para encontrar min y max como lo señala
Yeo. Esto es en realidad una restricción del montón: el único hallazgo eficiente es min o
max. La verdadera ventaja del montón es O (1) inserción promedio.