Sto cercando di dimostrare che un heap binario con nodi ha esattamente foglie, dato che l'heap è costruito nel modo seguente:
Ogni nuovo nodo viene inserito tramite percolate up . Ciò significa che ogni nuovo nodo deve essere creato al successivo figlio disponibile. Ciò che intendo con questo è che i bambini sono riempiti di livello inferiore e da sinistra a destra. Ad esempio, il seguente heap:
0
/ \
1 2
avrebbe dovuto essere costruito in questo ordine: 0, 1, 2. (I numeri sono solo indici, non danno alcuna indicazione dei dati effettivi contenuti in quel nodo.)
Ciò ha due importanti implicazioni:
Non può esistere alcun nodo al livello senza il livello completamente riempito
Poiché i bambini sono costruiti da sinistra a destra, non possono esserci "spazi vuoti" tra i nodi al livello o situazioni come le seguenti:
0 / \ 1 2 / \ \ 3 4 6
(Questo sarebbe un heap illegale secondo la mia definizione.) Pertanto, un buon modo di pensare a questo heap è un'implementazione di array di un heap, in cui non ci possono essere "salti" tra gli indici dell'array.
Quindi, stavo pensando che l'induzione sarebbe probabilmente un buon modo per farlo ... Forse qualcosa che deve affrontare anche casi strani per n. Ad esempio, alcune induzioni si basano sul fatto che anche cumuli costruiti in questo modo devono avere un nodo interno con un figlio per un numero pari e nessun nodo per un numero dispari. Idee?