數據結構——(最小)堆(完全二叉樹)


完全二叉樹(堆)和滿二叉樹的結構:

完全二叉樹的判斷:

二叉樹的層次遍歷(BFS)

堆的存儲
使用數組存儲,i結點的父結點下標就為(i–1)/2。它的左右子結點下標分別為2*i+1和2*i+2

堆的初始化:

直接使用數組存儲,然后堆化數組即可:

從下至上,從右到左,逐步堆化。

堆的增刪改查:

增:插入堆尾,從下往上冒泡。

刪:刪除堆頂元素時,堆頂元素和堆尾元素交換(同時刪除堆頂元素),從上往下冒泡即可。

改:增+刪

查:O(logN)

刪除任意元素:

《算法導論》Chapter6的習題6.5-8

將a[i]與堆尾a[n-1]交換,然后分情況討論:

①a[i]=a[n-1]無須操作

②a[i]>a[n-1]執行刪除元素操作

③a[i]<a[n-1]重新維護a[i]所在的子堆

堆的排序:

每次執行一次刪除堆頂的操作(將堆頂和堆尾交換),共N次,每次刪除需要執行一次從上往下冒泡,復雜度為O(LogN),總時間復雜度為O(NLogN),最小堆排序之后為降序數組。


免責聲明!

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



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