Está en la página 1de 5

MONTÍCULO

Un montículo es un árbol binario completo donde los datos están ordenados


parcialmente.

Por árbol completo se entiende que todos los niveles del árbol están llenos de izquierda a
derecha excepto el último nivel.

Existen dos variantes del montículo:

1. Montículo - máximo: todos los nodos almacenan un valor mayor o igual que el
de sus hijos. En este caso la raíz almacena el máximo.
2. Montículo - mínimo: todos los nodos almacenan un valor menor o igual que el
de sus hijos. En este caso la raíz almacena el mínimo.

Las operaciones más importantes sobre un montículo son Encontrar o seleccionar el


elemento mayor o menor, insertar un elemento y eliminar un elemento en el árbol.

El tiempo que toma seleccionar un elemento del árbol es constante, es decir del Orden de
Q (1).

Para insertar o eliminar se requiere respetar la propiedad del montículo, por ello se sigue
el siguiente proceso.

Proceso INSERTAR

1. Añadir el nuevo dato X a como ÚLTIMO nodo hoja

2. Para mover X a su posición correcta se compara con el valor de su padre y


se Recupera la propiedad de abajo a arriba

3. Las comparaciones siguen hasta que X está en la posición correcta.

El coste de la inserción es Q (log n), en el peor caso. El tiempo para insertar n valores en el
montículo será Q (n log n), por ejemplo si insertamos el 99 en un montículo máximo se
tiene:
Un montículo no es eficiente cuando se busca un valor arbitrario, sólo cuando se busca el
valor que está en la raíz.
El pseudocódigo para insertar un elemento en el montículo máximo implementado como
arreglo, es el siguiente:

Insertar_MB(E, MB)

SI (MB=Vacio) Entonces

UltimaHoja 1

MB[UltimaHoja].Elem E

MB[UltimaHoja]. Presente Si

C/c

UltimaHoja  UltimaHoja + 1

MB[UltimaHoja].Elem E

MB[UltimaHoja]. Presente Si

Recuperar Abajo_Arriba(UltimaHoja)

Terminar

El algoritmo para recuperar la propiedad de Abajo hacia Arriba

Recuperar Abajo_Arriba (Hoja)

SI (Hoja tiene Padre) Entonces

SI (Hoja.Elem > Padre.Elem) entonces

Aux  Padre.Elem

Padre.Elem  Hoja.Elem

Hoja.Elem  Aux

Recuperar Abajo_Arriba (Padre)

Terminar
El proceso de eliminar un elemento es muy parecido al proceso de inserción.

Proceso EXTRAER RAIZ

1. Se extrae el dato de la raíz y se sustituye por el último dato X del montículo.

2. Para mover X a su posición correcta se compara con el valor de sus hijos y


se intercambia con el mayor de sus hijos Recuperando la propiedad de
arriba a abajo

3. Las comparaciones siguen hasta que X está en su posición correcta.


Algoritmo para eliminar un elemento, en este caso el elemento a eliminar es la raíz ya que
es el mayor siempre.

Eliminar_MB(MB)  Mayor

SI (MB=Vacio) entonces

Mayor No

C/c

Mayor MB[1].Elem

MB[1].Elem  MB[UltimaHoja].Elem

MB[UltimaHoja]. Presente  NO

UltimaHoja  UltimaHoja - 1

Recuperar Arriba_ Abajo ( 1 )

Terminar devolviendo Mayor

Pensar cómo recuperar la propiedad de Arriba Abajo, tomando en cuenta que un nodo
puede tener 1 o 2 hijos.

Recuperar Arriba_ Abajo (Nodo)

SI (Nodo tiene hijos ) entonces

Terminar

También podría gustarte