您的位置:首页 > 理论基础 > 数据结构算法

05-树7 堆中的路径

2015-11-05 15:36 253 查看
05-树7 堆中的路径   (25分)

将一系列给定数字插入一个初始为空的小顶堆
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


思路:

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  数据结构