PAT (Advanced Level) Practice - 1147 Heaps(30 分)
发布日期:2021-06-30 23:43:02
浏览次数:2
分类:技术文章
本文共 1085 字,大约阅读时间需要 3 分钟。
题目链接:
题目大意:给一个树的层序遍历,判断它是不是堆,是大顶堆还是小顶堆。输出这个树的后序遍历。
解题思路:
- 借用序列已经输入好的数组,正好是完全二叉树层序遍历的下标的优势来操作比较。
- 首先根据 a[0] 和 a[1] 的大小比较判断可能是大顶还是小顶,分别赋值 f 为 1 和 -1,先根据层序遍历,从0~(n-1)/2【所有有孩子的结点】判断他们的孩子是不是满足 f 的要求,如果有一个结点不满足,那就将 f==0 表示这不是一个堆。根据 f 输出是否是堆,大顶堆还是小顶堆,然后后序遍历,根据 id 分别遍历 id*2+1 和 id*2+2,即他们的左右孩子,遍历完左右子树后输出根结点,即完成了后序遍历。
AC 代码
#include#include #define mem(a,b) memset(a,b,sizeof a)#define ssclr(ss) ss.clear(), ss.str("")#define INF 0x3f3f3f3f#define MOD 1000000007using namespace std;typedef long long ll;int n;int a[1009];void postT(int id) // 层序遍历 -> 后序遍历{ if(id>=n) return; postT(id*2+1); postT(id*2+2); printf("%d%c",a[id],id==0?'\n':' '); // Ps: 这里不是 id==n-1 噢}int main(){ int k,l,r,f; scanf("%d%d",&k,&n); while(k--) { for(int i=0;i a[1]?1:-1; for(int i=0;i<=(n-1)/2;i++) { l=i*2+1, r=i*2+2; if(f==1 && (a[i] a[l] || (r a[r]))){f=0; break;} } if(!f) puts("Not Heap"); else printf("%s Heap\n",f==1?"Max":"Min"); postT(0); } return 0;}
转载地址:https://lux-sun.blog.csdn.net/article/details/81987210 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月26日 22时09分30秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
3性能测试简介(什么是性能测试?为什么进行性能测试,性能指标分析)
2019-05-01
4loadrunner简介
2019-05-01
5loadrunner脚本优化
2019-05-01
windows10家庭版开启组策略
2019-05-01
windows10家庭版本安装loadrunner11【不推荐使用】
2019-05-01
windows2008 R2sp1安装loadrunner12
2019-05-01
LoadRunner12浏览器录制(谷歌火狐)
2019-05-01
LoadRunner12——录制脚本
2019-05-01
LoadRunner12——回放脚本
2019-05-01
loadrunner controller无法创建vuser
2019-05-01
python多线程_thread与threading(推荐使用)
2019-05-01
pip安装openpyxl失败,更换镜像源
2019-05-01
python 使用ddt数据驱动
2019-05-01
xpath定位
2019-05-01
selenium之 如何控制网页内嵌div中滚动条的滚动
2019-05-01
【经验分享】XPATH逻辑运算
2019-05-01
python+selenium 浏览器无界面模式运行
2019-05-01