Como todo heap é uma árvore completa, ele pode ser armazenado em um vetor, o que simplifica muito o processamento. Uma árvore completa tem seus elementos armazenados no vetor na ordem de seus níveis, em geral da esquerda para a direita. Isso quer dizer que a raiz da árvore (nível 0) fica no primeiro elemento do vetor, e os nós do nível 1 ficam nos elementos 1 e 2 (o problema restringia-se a árvores binárias). Os elementos do nível 2 ocupam os elementos 3, 4, 5 e 6, e assim por diante. A quantidade máxima de elementos em um nível é sempre igual ao dobro da quantidade de elementos do nível anterior, ou seja, o nível N tem 2 N elementos. Portanto a árvore da figura 3 poderia ser armazenada em um vetor da seguinte forma:
Para determinar se tratava-se de um max-heap, era necessário percorrer, para cada elemento, a posição dos seus descendentes e verificar se todos eram menores ou iguais ao elemento raiz daquela subárvore. Se para algum elemento isso não fosse verdade, aquela árvore não era um max-heap. O mesmo raciocínio vale para o min-heap, apenas mudando o operador de comparação, pois nesse caso nenhum descendente pode ser menor que o seu ancestral direto.
Autor: Antonio Cesar de Barros Munari (Fatec Sorocaba)
Nome | Comentário | |
---|---|---|
Heap, heap! | --- |