Eu estou tentando provar que um montão binária com nodos tem exatamente folhas, dado que o heap é construído da seguinte maneira:
Cada novo nó é inserido via percolate up . Isso significa que cada novo nó deve ser criado no próximo filho disponível. O que quero dizer com isso é que as crianças são preenchidas de nível inferior e da esquerda para a direita. Por exemplo, o seguinte heap:
0
/ \
1 2
teria que ter sido construído nesta ordem: 0, 1, 2. (Os números são apenas índices, eles não dão nenhuma indicação dos dados reais mantidos nesse nó.)
Isso tem duas implicações importantes:
Não pode existir nó no nível sem o nível k estar completamente preenchido
Como os filhos são criados da esquerda para a direita, não pode haver "espaços vazios" entre os nós no nível ou situações como a seguinte:
0 / \ 1 2 / \ \ 3 4 6
(Isso seria um heap ilegal pela minha definição.) Assim, uma boa maneira de pensar nesse heap é uma implementação de array de um heap, onde não pode haver nenhum "salto" nos indeces do array.
Então, eu estava pensando que a indução provavelmente seria uma boa maneira de fazer isso ... Talvez algo que precise lidar com casos ímpares para n. Por exemplo, alguma indução usando o fato de que mesmo pilhas montadas dessa maneira devem ter um nó interno com um filho para um n par e nenhum nó para um n ímpar. Ideias?