Saya mencoba untuk membuktikan bahwa tumpukan biner dengan node memiliki tepat daun, mengingat bahwa tumpukan dibangun dengan cara berikut:
Setiap node baru dimasukkan melalui meresap sampai . Ini berarti bahwa setiap node baru harus diciptakan di anak berikutnya yang tersedia. Apa yang saya maksudkan dengan ini adalah bahwa anak-anak diisi tingkat-bawah, dan kiri ke kanan. Sebagai contoh, berikut tumpukan:
0
/ \
1 2
akan memiliki telah dibangun dalam urutan ini: 0, 1, 2. (Jumlahnya hanya indeks, mereka tidak memberikan indikasi data aktual yang diselenggarakan di simpul tersebut.)
Ini memiliki dua implikasi penting:
Tidak ada simpul pada level tanpa level yang terisi penuh
Karena anak-anak dibangun kiri ke kanan, tidak ada "ruang kosong" antara node pada tingkat , atau situasi seperti berikut:
0 / \ 1 2 / \ \ 3 4 6
(Ini akan menjadi tumpukan ilegal menurut definisi saya.) Jadi, cara yang baik untuk memikirkan tumpukan ini adalah implementasi array tumpukan, di mana tidak ada "lompatan" di indeces array.
Jadi, aku berpikir induksi mungkin akan menjadi cara yang baik untuk melakukan hal ini ... Mungkin sesuatu yang harus berurusan dengan bahkan kasus aneh untuk n. Sebagai contoh, beberapa induksi menggunakan fakta bahwa tumpukan bahkan membangun dalam mode ini harus memiliki simpul internal dengan satu anak untuk lebih n, dan tidak ada node tersebut untuk n ganjil. Ide ide?
sumber
Jawaban:
Jika saya mendapatkan pertanyaan Anda dengan benar, tumpukan yang diperoleh hanyalah pohon biner yang terurut, di mana dalam urutan saya maksudkan bahwa level hanya dapat ditempati setelah level k - 1 telah terisi penuh, dan setiap level ditempati dari kiri ke kanan, tanpa melewatkan.k k−1
Maka bukti seperti ini.
sumber
Berikut adalah bukti logis sederhana.
Daun terakhir adalah indeks. Induknya berada pada indeks ⌊ n / 2 ⌋ dan demikian pula, tidak ada elemen sedemikian sehingga induknya adalah ( ⌊ n / 2 + 1 ⌋ ) t h elemen. Jadi daun diindeks dari ⌊ n / 2 ⌋ 1 ke n.nth ⌊n/2⌋ ⌊n/2+1⌋)th ⌊n/2⌋
sumber