C++,练习6-1 堆中的路径
将一系列给定数字插入一个初始为空的最小堆 h。随后对任意给定的下标 i,打印从第 i 个结点到根结点的路径。
输入格式:
每组测试第 1 行包含 2 个正整数 n 和 m (≤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); } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现