05-树7 堆中的路径 (25分)

来源:互联网 发布:python 缺省参数 编辑:程序博客网 时间:2024/06/04 18:19

将一系列给定数字插入一个初始为空的小顶堆H[]。随后对任意给定的下标i,打印从H[i]到根结点的路径。

输入格式:

每组测试第1行包含2个正整数NNMM(\le 10001000),分别是插入元素的个数、以及需要打印的路径条数。下一行给出区间[-10000, 10000]内的NN个要被插入一个初始为空的小顶堆的整数。最后一行给出MM个下标。

输出格式:

对输入中给出的每个下标i,在一行中输出从H[i]到根结点的路径上的数据。数字间以1个空格分隔,行末不得有多余空格。

输入样例:

5 346 23 26 24 105 4 3

输出样例:

24 23 1046 23 1026 10

解:利用一个规律:子节点的下标index,父节点的下标j,index=j/2。

代码:

#include <iostream>#include <algorithm>using namespace std;const int maxlen = 1005;int H[maxlen];void insert(int data, int index){H[index] = data;for(int j = index; j > 0; j /= 2){if(H[j/2] > H[j]){swap(H[j/2], H[j]);}}}void print_path(int index){cout<<H[index];for(int j = index/2; j > 0; j /= 2){cout<<' '<<H[j];}}int main(){int N, M;cin>>N>>M;int data;H[0] = -10001;for(int i = 1; i <= N; i++){cin>>data;insert(data, i);}for(int i = 1; i <= M; i++){cin>>data;print_path(data);cout<<endl;}return 0;}

0 0
原创粉丝点击