這篇涉及到資料結構,難度中等。
什麼是堆?
堆一般指二叉堆。是使用完全二叉樹這種資料結構建構的一種實際應用。通過它的特性,分為最大堆和最小堆兩種。
在之前,先簡單說明下什麼是完全二叉樹。
滿二叉樹和完全二叉樹
滿二叉樹如圖所示,是完全圓滿的,不用特别解釋。
再看完全二叉樹:
假如從根往下逐層數數,如果讀出的數連續就是完全二叉樹,否則就不是。
比如左圖,數出來的數是1,2,3,4,5,6,7,8,9,而右圖數出來的是1,2,3,4,5,6,7,8,9,11,缺了一個10。
數組存儲完全二叉樹
完全二叉樹有個神奇的規律,可以用一個一維數組存儲,比如:
将每個節點編個号,則每個節點k的左右孩子索引分别是2*k和2*k+1,也就是說位置是固定的。
最大和最小堆
介紹了完全二叉樹,接着繼續說堆。
最小堆定義
在二叉樹中,任何一個節點的值比其子樹的任意一個節點都要小。
最大堆定義
在二叉樹中,任何一個節點的值比其子樹的任意一個節點都要大。
堆化
在一個完全二叉樹中,将資料重新按照堆的的特性排列,就可以将完全二叉樹變成一個堆。這個過程叫做“堆化”。
總結
介紹了幾個基礎概念,下篇再繼續研究