無序的完全二叉樹轉為堆。
這裡以轉為最大堆為例:
首先要知道sift down下沉操作,才能理解怎麼轉為最大堆,
最大堆的下沉:下沉某個節點,即把該節點與它的兩個子節點,共3個節點中值最大的結點選出來作為這三個節點中的父節點。並且,下沉後,被下沉的結點及其子節點還要進行下沉操作,直到不需要下沉為止,這是為了避免下沉後節點破壞了已經建立好的堆結構。
下沉操作舉個例子:
如圖:
上面這張圖,28和62不需要下沉,只要下沉15節點後這個堆就可以構建完成了。
當15下沉後,15是與62節點交換位置,此時62變為該堆的根節點。
交換完後,檢測到15及其兩個子節點41和17不能構成大頂堆結構,所以需要對15再進行下沉操作.....步驟和前面的一樣
15下沉完後,該二叉樹就是乙個大頂堆了。
轉換步驟:
完全二叉樹的最後一層非葉子節點,從右往左,從下往上開始進行下沉sift down操作(
如圖:1.從值為17的節點開始下沉,然後下沉的結點按順序為:41,28,15....
資料結構 二叉完全樹(堆)
參考文章 堆常用來實現優先佇列。用陣列儲存資料,而不是鍊錶。在佇列中,作業系統排程程式反覆提取佇列中第乙個作業並執行,因為實際情況中某些時間較短的任務將等待很長時間才能結束,或者某些不短小,但具有重要性的作業,同樣應當具有優先權。堆即為解決此類問題設計的一種資料結構。堆的實現通過構造二叉堆 bina...
資料結構 完全二叉樹
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!完全二叉樹是一種效率很高的資料結構,堆就是一種完全二叉樹,所以效率極高。像十分常用的排序演算法 dijkstra演算法 prim演算法等都要用堆才能優化 幾乎每次都要考到的二叉排序樹的效率也要借助平衡性來提高,而平衡性基於完全二叉樹。完全二叉樹定義...
資料結構 樹結構 二叉樹 完全二叉樹 滿二叉樹
樹結構是一種描述非線性層次關係的資料結構。除根結點外,其餘每個結點有且僅有乙個直接前驅。每個結點可以有任意多個直接後繼。英文名詞表示 tree,root,node,leaf,edge,child,subtree 要麼二叉樹沒有根結點,是一棵空樹。要麼二叉樹由根結點,左子樹,右子樹組成,且左子樹和右子...