Saltar al contenido

Modelo por capas

Árbol completo en un array

Un árbol binario completo tiene todos sus niveles llenos salvo quizá el último, que se llena de izquierda a derecha. Esa forma permite guardarlo en un array sin punteros, nivel por nivel. Mira la figura: el mismo heap como árbol (arriba) y como array (abajo).

Un heap como árbol y como arrayUn min-heap con los valores 2, 5, 3, 9, 7 y 8, dibujado dos veces. Arriba, el árbol: 2 es la raíz, 5 y 3 son sus hijos, 9 y 7 son hijos de 5 y 8 es hijo de 3. Abajo, el mismo contenido como array de seis celdas, posiciones 0 a 5, que se llena nivel por nivel: la posición 0 es el nivel 0, las posiciones 1 y 2 el nivel 1 y las 3, 4 y 5 el nivel 2.205132937485205132937485raíznivel 0nivel 1nivel 2nivel 0nivel 1nivel 2array
El mismo min-heap dos veces. El número pequeño bajo cada nodo y bajo cada celda es la misma posición. El array se llena nivel por nivel, de izquierda a derecha.

Las posiciones se calculan:

Texto
hijos de i: 2i + 1 y 2i + 2padre de i: (i − 1) / 2, redondeando hacia abajo

Un min-heap cumple el invariante:

Texto
cada padre es menor o igual que sus hijos

Por eso el mínimo está siempre en la raíz, la posición 0. El invariante no dice nada de los hermanos: 5 y 3 no tienen por qué estar en orden entre sí.

En el array [1, 3, 2, 7, 4, 9, 6, 8], ¿cuál es el padre del valor 7 (posición 3) y cuáles son sus hijos?