最小堆的建立 插入 與刪除


堆是完全二叉樹,完全二叉樹最大的特點就是 把數據儲存在數組里 通過父子結點的關系來做  不用實際建樹  parent=leftchild/2; leftchild=2*parent  右就加1這兒指的是序號關系,儲存的時候注意是利用樹的邏輯圖 從上到下 從左到右編號12345....。


建堆:實際是把數據先放入數組(注意下標從1開始),對應邏輯圖,寫調整代碼,我的基本思路是從數組末尾開始,對應元素與其父節點比較,滿足條件就換值,並且對被換的調用調整函數(要單獨寫個調整函數)因為被換的一個是可能不滿足堆的要求的。然后一個while循環這樣的操作一直做到第2個元素.一個最小堆或最大堆就可以了

刪除操作:把數組最后元素替換第一個,把最后一個賦個特殊值。然后調用調整函數就OK。這樣的好處是數組中實際的元素保持連續的,方便操作,而且代碼簡單。

插入操作;同理和刪除差不多,把插入的數放在數組最后(這種方法很好),調用調整函數。

 

調整函數:接收元素下標,判斷它的左兒子和右兒子(通過下標關系很好找)大小,把滿足條件的換上來,對被換的繼續調用調整函數遞歸直到被換的元素滿足條件,大於或小於左右兒子。細節注意數組越界等問題。

一個插入和刪除操作的時間約等於調用函數的時間復雜度,調用函數最多遞歸樹的高度次也就是logn(n個結點),那么時間這三種操作的時間復雜度就是logn。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM