Está en la página 1de 10

ÁRBOL

Concepto

Estructura no lineal que organiza sus elementos formando jerarquías.

Nodo:

Elemento del árbol.

Á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

En ciencias de la computación, un árbol binario es una estructura de datos en la cual cada


nodo puede tener un hijo izquierdo y un hijo derecho. No pueden tener más de dos hijos. Si
algún hijo tiene como referencia a null, es decir que no almacena ningún dato, entonces este
es llamado un nodo externo.

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 altura de un árbol se define como la altura de su raiz.

• La profundidad de un nodo se define como la longitud del camino (único) que comienza
en la raíz y termina en el nodo.

La profundidad de la raíz es cero, y la profundidad de un nodo se puede calcular como la


profundidad de su padre más uno.

• A la profundidad de un nodo también se la denomina nivel del nodo en el árbol.

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.

Recorridos sobre árboles (ordenados)

• 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.

• Recorrido por Niveles: Se etiquetan los nodos según su profundidad (nivel).

Se recorren ordenados de menor a mayor nivel, a igualdad de nivel se recorren de


izquierda a derecha.

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

Grado: Es el número de hijos que tiene en ese momento el nodo

Nivel de un nodo: es su distancia desde la raíz al nodo

Orden: Número potencial de hijos que puede tener cada elemento de un árbol.

La profundidad de un árbol binario es el máximo nivel de cualquier hoja del árbol.

El esquema algoritmo para implementar un recorrido por niveles es exactamente el mismo


que el utilizado en la versión iterativa del recorrido en preorden pero cambiando la
estructura de datos que almacena los nodos por una cola.

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.

Las hojas del árbol de la izquierda serían escritas en Lisp como:

(((N O) I J) C D ((P) (Q)) F (M))

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 Heap binomial es una colección de Árboles Binomiales. Un Árbol Binomial es un árbol


ordenado definido recursivamente de la siguiente forma:

Un árbol binomial de orden 0 ( B0 ) es un solo nodo

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.

Esta estructura tiene gran importancia en la implementación de la operación de unión entre


dos Heaps binomiales.

Propiedades de los Árboles Binomiales

Un árbol binomial de orden k (Bk) tiene:

2k nodos

Altura k
nodos a la profundidad i. (el nombre proviene de esta propiedad, ver Coeficientes
Binomiales)

Un Heap Binomial es implementado como un conjunto de árboles binomiales que


satisfacen las propiedades del Heap Binomial

Propiedades del Heap Binomial:

Cada árbol binomial en el Heap binomial cumple la propiedad de min-heap (La llave de


cualquier nodo del árbol es mayor o igual que la llave de su padre)

Solo puede haber 0 o 1 árboles binomiales de cada orden en el heap.

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

Usualmente un Heap Binomial se implementa como una lista enlazada de árboles


binomiales ordenada crecientemente por el orden de cada árbol binomial.

Operaciones sobre un Heap Binomia


Mezcla. la más sencilla e importante operación es la mezcla de 2 árboles binomiales del
mismo orden en dos Heap binomiales.

Esto se logra fácilmente debido a la estructura de los mismos.

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).

Entonces el otro árbol se convierte en un subárbol del primero.

Esta operación es la base de la mezcla de dos Heaps Binomiales. La operación de mezcla


de dos heaps es, quizás, la más importante.

Esta operación es utilizada como subrutina de muchas otras operaciones en el heap. En la


mezcla de dos Heaps se deben unificar las colecciones de Árboles Binomiales de ambos.
Para esto se realiza lo siguiente: Para cada posible orden k de los árboles en los heaps:

Si el árbol binomial de orden k no se encuentra en ninguno de los dos se pasa al siguiente


orden

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).

En el transcurso del algoritmo debemos examinar a lo sumo 3 árboles del mismo orden (2


procedentes de los 2 heaps que estamos mezclando y 1 de la mezcla en la iteración anterior
de 2 árboles más pequeños).

Dado que cada árbol binomial se corresponde con un bit en la representación binaria de n


(tamaño de cada heap), se puede establecer una analogía entre mezclar dos heaps y la
adición binaria de los tamaños de cada heap.
Donde aparece un acarreo en la adición ocurre una mezcla de 2 árboles binomiales. Como
cada heap tiene a lo sumo log n árboles binomiales y mezclar dos árboles se puede
implementar en O(1) el orden de la mezcla es O(log n).

Diferencia entre árbol binario y heap

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.

También podría gustarte