本例中實現了最小堆的構造、插入、刪除。最小堆表示乙個非終端節點均不大於其左右孩子節點。最小堆用完全二叉樹表示,但是二叉樹存入一維陣列中。
將完全二叉樹存入陣列,有一些性質。先將二叉樹從上到下,從左到右給每個節點編號0,1....n。那個乙個節點編號i,他的左孩子編號為2*i+1,右孩子編號2*i+2。完全二叉樹的最後乙個分支節點(非終端節點)為(n-2)/2。
堆的構造:找到最後的分支節點,使用filterdown將它構造成堆。然後在將在該節點前面的子樹構造成堆。直到將根節點構造成堆。
**:;
minheap minheap=new minheap(array);
system.out.println(arrays.tostring(minheap.array));
minheap.insert(14);
system.out.println(arrays.tostring(minheap.array));
system.out.println(minheap.deletetop());
system.out.println(arrays.tostring(minheap.array)); }
static class minheap
} void filterdown(int start)
if(temp>array[j]) else
}array[i]=temp;
} void insert(int d)
void filterup(int p) {
int j=p,i=(j-1)/2;
int temp=array[j];
while(i>=0) {
if(temp
filterup的流程圖:
樹 二叉樹 堆
樹 樹是乙個無向無環圖,n個節點正好有n 1條邊,再任意加上一條邊就可以構成迴路。乙個結點的上乙個結點是這個結點父結點,這個節點是子結點,並且父結點和子結點是相對的。特別的,如果乙個結點沒有父結點,那這個結點是根節點 乙個結點沒有子結點,它是葉節點。二叉樹 如果乙個樹除了葉結點之外的其他每個結點都不...
二叉堆(完全二叉樹)
最小堆的實現 最小堆是一顆完全二叉樹 這裡用陣列實現完全二叉樹 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...
樹 二叉樹 滿二叉樹 完全二叉樹 堆 概念彙總
樹 乙個擁有n 個節點和n 1 條邊的乙個有向無環圖。二叉樹 每個節點最多有兩個子樹的樹結構。滿二叉樹 除最後一層無任何子節點外,每一層上的所有結點都有兩個子結點的二叉樹。完全二叉樹 由滿二叉樹而引出 二叉樹的深度為h,除第 h 層外,其它各層 1 h 1 的結點數都達到最大個數 滿二叉 樹 第 h...