1. 程式人生 > >資料結構基礎 之 二叉堆 概念篇

資料結構基礎 之 二叉堆 概念篇

【二叉堆定義】

二叉堆是完全二叉樹和近似二叉樹,二叉堆滿足堆特性:父節點的鍵值總是與任何一個子節點的鍵值保持固定的序關係,且每個節點的左子樹和右子樹都是一個二叉堆。當父節點的鍵值總是大於或等於任何一個子節點的鍵值時為最大堆。 當父節點的鍵值總是小於或等於任何一個子節點的鍵值時為最小堆。


【二叉堆操作】

1.二叉堆插入:二叉堆插入只需要將插入陣列尾部,然後和父節點比較判斷是否需要交換(如果是最小堆,當插入點比父節點小則交換,如果是最大堆,當插入點比父節點大則交換),如果交換髮生了則繼續比較,如此往復直到根節點。相當於把插入節點上浮的過程。也可以當做插入演算法,只是總的比較次數只有Log2,N。演算法複雜度為 O(Log2,N)。

2.二叉堆刪除:二叉堆刪除是刪除根節點,實現是把最後一個節點複製給根節點然後再對該節點進行堆化處理。
3.二叉堆排序:把根節點和最後的節點進行交換後,再對根節點進行堆化處理,如此交換和堆化後就是一個有序陣列。

4.整個陣列堆化處理,後半陣列可以看出可以預設已經堆化處理過了,只要對前半部分進行堆化處理即可。從N/2開始對所有前面節點經堆化處理。

【二叉堆時空複雜度和二叉堆原始碼】

http://blog.csdn.net/u013630349/article/details/46943503(時空複雜度)
詳見:資料結構基礎 之 深入理解二叉堆建立的時空複雜
http://blog.csdn.net/wangdingqiaoit/article/details/46366205(c)

http://blog.csdn.net/listeningsea/article/details/7718484(c++)

【備註】

1.堆排序得到的二叉樹是優先佇列,但是,並不是所有優先佇列的二叉樹符合堆排序;

2.二叉堆的基本操作包括建堆,插入,刪除,增減權重。