最大堆小習題

2021-08-01 13:39:37 字數 544 閱讀 4539

建堆時,最壞情況下需要挪動元素次數是等於樹中各結點的高度和。問:對於元素個數為12的堆,其各結點的高度之和是多少?

a. 10

b. 11

c 12

d 15

良心解答:

首先,堆是乙個完全二叉樹;

其次,該題是求需要下沉的結點的高度和;

最後,分析,最後一層5個元素,第7個結點是葉子結點,高度是0,

4,5,6最多下沉一次,高度為1,

2,3最多下沉2次,高度為2,

1最後下沉3次,高度為3,

3*1+2*2+1*3=10

最大堆刪除操作和建立都是以新增新元素為基礎,依次對比父節點和孩子結點,下沉。

void percdown(int a,int p,int n)

a[father]=x;

}

最小最大堆

include include include include define max size 100 define swap x,y,t t x x y y t typedef struct element element heap max size void min max insert ele...

最大堆 最小堆

堆是一種經過排序的完全二叉樹,其中任一非終端節點的資料值均不大於 或不小於 其左孩子和右孩子節點的值。最大堆和最小堆是 二叉堆的兩種形式。最大堆 根結點的鍵值是所有堆結點鍵值中最大者。最小堆 根結點的鍵值是所有堆結點鍵值中最小者。而最大 最小堆集結了最大堆和最小堆的優點,這也是其名字的由來。最大 最...

最大堆 最小堆

堆的定義是 n個元素的序列,當且僅當滿足如下關係時被成為堆 1 ki k2i 且 ki k2i 1 或 2 ki k2i 且 ki k2i 1 i 1,2,n 2 當滿足 1 時,為最小堆,當滿足 2 時,為最大堆。若將此序列對應的一維陣列堪稱是乙個完全二叉樹,則2i和2i 1個節點分別是節點i的左...