20 以一陣列 A 實作最大二元堆積(Max Binary Heap),一般方法為以 A[1] 代表根節點(Root),A[i] 代表堆積中的某一個節點及儲存其數值,而 A[2i] 和 A[2i+1] 分別為 A[i] 所代表的節點之左子節點 (Left Child)及右子節點(Right Child)。若目前堆積共有九個數字,且其對應的陣列之值 A[1], A[2], ... 依序為 18, 10, 13, 8, 7, 5, 2, 4, 6,則在提取最大值(Extract Max)後,A[3] 之值為何?
(A)5
(B)6
(C)8
(D)13
答案:登入後查看
統計: A(71), B(210), C(168), D(95), E(0) #1625112
統計: A(71), B(210), C(168), D(95), E(0) #1625112
詳解 (共 6 筆)
#2772276
最大堆積為一完全二元樹,且每個節點的key值皆不小於其子節點
最大堆積之Delete Max:
從根節點移除最大值後,將尾端資料移去根節點,依序向下檢查子節點,若子節點>該節點則互換,直到子節點比該節點小或檢查至樹葉節點為止。
如題敘述,刪除18後,將6(尾端)移至root依序向下檢查,13>6所以互換(此時root=13,第三節點=6)繼續向下比,此時兩子節點分別為5、2皆<6,故結束調整。
所求,第三節點即為6。
39
3
#5617625
最大堆積 刪除步驟 :
1. 把最大節點A[1] 與最後一個節點交換,然後把它去除
2. 接著最後一個節點被換上來A[1]了,開始跟子節點比較,最大堆積就比較大的子節點換,最小堆積就跟比較小的子節點換
3. 重複(2.)直到滿足最大/最小堆積為止
2
0
#5179117
為什麼跟13比而不是跟10比呢?
1
1