05-树7 堆中的路径

来源:互联网 发布:apache cxf 3.0.4下载 编辑:程序博客网 时间:2024/05/16 10:10
05-树7 堆中的路径   (25分)

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

输入格式:

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

输出格式:

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

输入样例:

5 346 23 26 24 105 4 3

输出样例:

24 23 1046 23 1026 10 


思路:

1,基础题,考二叉堆的建立和插入,其实删除比插入复杂一点,但这里不需要。


#include <iostream>using namespace std;typedef struct Heap* MinHeap;struct Heap{    int size;    int capacity;    int *element;};MinHeap Initialize(int maxElement){    MinHeap h = new Heap;    h->size = 0;    h->capacity = maxElement;    h->element = new int[maxElement+1];    h->element[0] = -10001;    return h;}void Insert(MinHeap h, int x){    int i;    for(i=++h->size; h->element[i/2]>x; i/=2)        h->element[i] = h->element[i/2];    h->element[i] = x;}int main(){    int n,m,x,q;    cin>>n>>m;    MinHeap h = Initialize(n);    for(int i=0;i<n;i++)    {        cin>>x;        Insert(h,x);    }    for(int i=0;i<m;i++)    {        cin>>q;        for(int j=q;j>1;j/=2)            cout<<h->element[j]<<' ';        cout<<h->element[1]<<endl;    }    return 0;}


0 0
原创粉丝点击