看板 TransCSI 關於我們 聯絡資訊
※ 引述《forris (喬巴)》之銘言: : 我現在有一串數列:3, 76, 11, 49, 25, 54, 66, 40, 32, 27 : 要做最大堆積,先把數列做成完整二元樹: : 3(1) : / \ : 76(2) 11(3) : / \ / \ : 49(4) 25(5) 54(6) 66(7) : / \ / : 40(8)32(9)27(10) : 之後的步驟要怎麼做阿? 是把最大子節點跟父節點對調嗎? 建max heap的方法有兩種,你採用的是bottom up, 建完CBT後,從最後一個有child的父點開始調整, 括號內為存在一維陣列的位置, 假設n個資料,就是從n/2取下限的那個點為root所構成的subtree開始調, 現在有10個,所以找5號的那個子樹 調成 27 / 25 再來換4號的,不需要調 3號調成 66 / \ 54 11 2號不需要調 1號調成 76 再檢查對調過的那個3,是否比二個child大 / \ 3 66 沒有的話就跟二個child裡大的那個換,然後繼續從對調過的子樹檢查,直到結束.. -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 61.217.234.101