C++,练习6-1 堆中的路径

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

输入格式:

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

输出格式:

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

输入样例:

5 3
46 23 26 24 10
5 4 3

输出样例:

24 23 10
46 23 10
26 10
#include <iostream>
#include <vector>
#include <algorithm>
void printPath(std::vector<int>& tree,int index){
while(index>1){
std::cout<<tree[index]<<' ';
index/=2;
}
if(index == 1){
std::cout<<tree[index]<<std::endl;
}else{
std::cout<<"error"<<std::endl;
}
}
int main(){
int size,outCount;
std::cin>>size>>outCount;
std::vector<int> tree(size+1);
tree[0] = -1;
for(int i = 1;i<=size;i++){
std::cin>>tree[i];
int j = i;
while(j>1 && tree[j]<tree[j/2]){
std::swap(tree[j],tree[j/2]);
j/=2;
}
}
//默认从小到大排序
// std::sort(tree.begin()+1,tree.end());
for(int i = 0;i<outCount;i++){
int index;
std::cin>>index;
printPath(tree,index);
}
}
posted @   Kazuma_124  阅读(9)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示