堆中的路徑(構建小頂堆)

2021-10-02 14:07:12 字數 899 閱讀 6609

將一系列給定數字插入乙個初始為空的小頂堆h。隨後對任意給定的下標i,列印從h[i]到根結點的路徑。

每組測試第1行包含2個正整數n和m(≤1000),分別是插入元素的個數、以及需要列印的路徑條數。下一行給出區間[-10000, 10000]內的n個要被插入乙個初始為空的小頂堆的整數。最後一行給出m個下標。

對輸入中給出的每個下標i,在一行中輸出從h[i]到根結點的路徑上的資料。數字間以1個空格分隔,行末不得有多餘空格。

5 3

46 23 26 24 10

5 4 3

24 23 10

46 23 10

26 10

最小堆,也稱「小頂堆」,是一種經過排序的完全二叉樹,其中任一非終端節點的資料值均不大於其左子節點和右子節點的值。

最大堆和最小堆,從根節點到任意結點路徑上結點序列都是有序的 

#includeusing namespace std;

const int maxn = 1001;

const int minn = -10001;

int h[maxn],size;

void create()

//向乙個小頂堆中插入資料,同時保證插入後還是個小頂堆

void insert(int x)

h[i] = x;

}int main()

int index;

for(int i=0;i>index;

cout<1)

printf("\n");

} return 0;

}

大頂堆小頂堆

堆通常是乙個可以被看做一棵完全二叉樹的陣列物件 如果對一棵有n個結點的完全二叉樹的結點按層序編號 從第1層到第 1層,每層從左到右 則對任一結點i 1 i n 有 1 如果i 1,則結點i無雙親,是二叉樹的根 如果i 1,則其雙親是結點。2 如果2i n,則結點i為葉子結點,無左孩子 否則,其左孩子...

堆排(大頂堆,小頂堆)

分類 資料結構 演算法相關 2009 10 15 12 26 2289人閱讀收藏 舉報汗,別人都說大小頂堆只是改改大於號的問題,可我的 從大頂堆只改動大於號調整為小頂堆竟然越界樂,掣肘!後來幾經更改才發現是傳參的問題 見 看來大頂堆改小頂堆不是 亦或是我rp出點問題?搞笑的是 磚頭 c b 竟然對越...

堆中的路徑 小頂堆的建立以及堆排序

推排序中的小頂堆的建立,需要注意的是,哪怕是相同的數,不同的插入順序最終建立堆都不一樣。將一系列給定數字插入乙個初始為空的小頂堆h i 隨後對任意給定的下標i,列印從h i 到根結點的路徑。組測試第1行包含2個正整數n和m 1000 分別是插入元素的個數 以及需要列印的路徑條數。下一行給出區間 10...