樹3 1 二叉樹 堆

2022-07-23 08:09:15 字數 1053 閱讀 6572

一、堆的性質

結構性:用陣列表示的完全二叉樹

有序性:任意一結點的關鍵字是其子樹所有結點的最大值(或最小值)

二、最大堆的操作

1、建立乙個空的最大堆,堆從下標為1的地方開始存放(根結點下標為1)

2、最大堆的插入

首先,把要插入的結點放在陣列的末尾,假設下標為h->size + 1

再將它與父結點比較,如果它比父結點大,兩者互換位置

直到它比父結點小,這時候下標為0的很大的元素起到了哨兵作用。

3、最大堆的刪除:刪除最大的元素,然後再調整剩餘結點,使其仍然是乙個最大堆

把最大堆的最後乙個元素a挪到根結點

找出a現在的左右兒子中較大的那個

如果a比左右兒子中較大的那個要小

互換位置

繼續比較a與左右兒子中較大的那個

直到a比左右兒子都要大

4、最大堆的建立:將n個元素按最大堆的要求儲存在一維陣列中

方法1:乙個乙個插入,效率較低

(1)將n個元素按輸入順序存入,先滿足完全二叉樹的結構特性

(2)調整各結點位置,以滿足最大堆的有序性

乙個結點,左子樹是乙個最大堆,右子樹是乙個最大堆

從刪除操作,我們已經知道如何將他們三者調成乙個最大堆

那麼現在我們可以倒過來,逐步建立最大堆

下圖中,p表示結點——左子樹——右子樹模型中結點的下標

h表示完全二叉樹,一開始不是最大堆,但執行完perdown後是最大堆

樹 二叉樹 堆

樹 樹是乙個無向無環圖,n個節點正好有n 1條邊,再任意加上一條邊就可以構成迴路。乙個結點的上乙個結點是這個結點父結點,這個節點是子結點,並且父結點和子結點是相對的。特別的,如果乙個結點沒有父結點,那這個結點是根節點 乙個結點沒有子結點,它是葉節點。二叉樹 如果乙個樹除了葉結點之外的其他每個結點都不...

樹 二叉樹 滿二叉樹 完全二叉樹 堆 概念彙總

樹 乙個擁有n 個節點和n 1 條邊的乙個有向無環圖。二叉樹 每個節點最多有兩個子樹的樹結構。滿二叉樹 除最後一層無任何子節點外,每一層上的所有結點都有兩個子結點的二叉樹。完全二叉樹 由滿二叉樹而引出 二叉樹的深度為h,除第 h 層外,其它各層 1 h 1 的結點數都達到最大個數 滿二叉 樹 第 h...

二叉堆(完全二叉樹)

最小堆的實現 最小堆是一顆完全二叉樹 這裡用陣列實現完全二叉樹 index 0 1 2 3 4 5 6 value 空 a b c d 任意index,其父親為index 2,左兒子為2 index,右兒子為2 index 1 時間複雜度 o logn include includeusing na...