完全二叉樹(堆)和滿二叉樹的結構:
完全二叉樹的判斷:
二叉樹的層次遍歷(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),最小堆排序之后為降序數組。