1147. Heaps (30) 堆

2023-10-22 11:58
文章标签 30 1147 heaps

本文主要是介绍1147. Heaps (30) 堆,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

1147. Heaps (30)

时间限制
200 ms
内存限制
65536 kB
代码长度限制
16000 B
判题程序
Standard
作者
CHEN, Yue

In computer science, a heap is a specialized tree-based data structure that satisfies the heap property: if P is a parent node of C, then the key (the value) of P is either greater than or equal to (in a max heap) or less than or equal to (in a min heap) the key of C. A common implementation of a heap is the binary heap, in which the tree is a complete binary tree. (Quoted from Wikipedia at https://en.wikipedia.org/wiki/Heap_(data_structure))

Your job is to tell if a given complete binary tree is a heap.

Input Specification:

Each input file contains one test case. For each case, the first line gives two positive integers: M (<= 100), the number of trees to be tested; and N (1 < N <= 1000), the number of keys in each tree, respectively. Then M lines follow, each contains N distinct integer keys (all in the range of int), which gives the level order traversal sequence of a complete binary tree.

Output Specification:

For each given tree, print in a line "Max Heap" if it is a max heap, or "Min Heap" for a min heap, or "Not Heap" if it is not a heap at all. Then in the next line print the tree's postorder traversal sequence. All the numbers are separated by a space, and there must no extra space at the beginning or the end of the line.

Sample Input:
3 8
98 72 86 60 65 12 23 50
8 38 25 58 52 82 70 60
10 28 15 12 34 9 8 56
Sample Output:
Max Heap
50 60 65 72 12 23 86 98
Min Heap
60 58 52 38 82 70 25 8
Not Heap
56 12 34 28 9 8 15 10


        给出一个层序遍历的树,判断是不是最大堆或者最小堆,最后按后序遍历输出。

        输入数据的时候建立二叉树。给出的是层序遍历,那么最后的树除了右下肯定是充满了的,用一个list存储没有右子树的节点地址,每次把新节点接在list最前面的节点上,如果最前面的节点左右子树都有了就pop,即可建立二叉树。

        之后思路很清楚的,递归判断,通过返回值判断子树类型,再结合自身节点情况继续向上返回即可,判断过程中可以以后序顺序收集数据,最后输出即可。(后久没做二叉树居然忘记了后序是怎么遍历的了。。。


#include <cstdio>
#include <cstdlib>
#include <list>
#include <vector>using namespace std;typedef struct Node *TREE;
typedef struct Node {int data;TREE l;TREE r;
}Node;int M, N;
int sz[100010];
Node *T;
vector<int>v1;int isHeap(TREE t) {if ((!t->l) && (!t->r)) {v1.push_back(t->data);return 3;}if (!t->r) {int f = isHeap(t->l);v1.push_back(t->data);return t->data > t->l->data ? 1 : 2;}if (t->data > t->l->data&&t->data > t->r->data) {int ll = isHeap(t->l);int rr = isHeap(t->r);v1.push_back(t->data);if (ll == 0 || rr == 0 || ll == 2 || rr == 2)return 0;return 1;}else if (t->data < t->l->data&&t->data < t->r->data) {int ll = isHeap(t->l);int rr = isHeap(t->r);v1.push_back(t->data);if (ll == 0 || rr == 0 || ll == 1 || rr == 1)return 0;return 2;}else {int ll = isHeap(t->l);int rr = isHeap(t->r);v1.push_back(t->data);return 0;}
}void pf() {int n = v1.size();for (int i = 0; i < n; i++) {printf("%d%c", v1[i], i == n - 1 ? '\n' : ' ');}
}void checkk() {v1.clear();int f = T->data > T->l->data ? 1 : 2;//0:Not Heap  1:Max Heap  2:Min Heap  3:Allf = isHeap(T);if (f == 1) {printf("Max Heap\n");}else if (f == 2) {printf("Min Heap\n");}else {printf("Not Heap\n");}pf();
}int main() {scanf("%d %d\n", &M, &N);for (int i = 0; i < M; i++) {int t;list<TREE>ls;TREE rot = NULL;for (int j = 0; j < N; j++) {scanf("%d", &t);TREE tt = (TREE)malloc(sizeof(Node));tt->data = t;tt->l = NULL;tt->r = NULL;ls.push_back(tt);if (!rot) {rot = tt;}else {if ((ls.front())->l) {(ls.front())->r = tt;ls.pop_front();}else {(ls.front())->l = tt;}}}T = rot;checkk();}return 0;
}


这篇关于1147. Heaps (30) 堆的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/261290

相关文章

30常用 Maven 命令

Maven 是一个强大的项目管理和构建工具,它广泛用于 Java 项目的依赖管理、构建流程和插件集成。Maven 的命令行工具提供了大量的命令来帮助开发人员管理项目的生命周期、依赖和插件。以下是 常用 Maven 命令的使用场景及其详细解释。 1. mvn clean 使用场景:清理项目的生成目录,通常用于删除项目中自动生成的文件(如 target/ 目录)。共性规律:清理操作

2024网安周今日开幕,亚信安全亮相30城

2024年国家网络安全宣传周今天在广州拉开帷幕。今年网安周继续以“网络安全为人民,网络安全靠人民”为主题。2024年国家网络安全宣传周涵盖了1场开幕式、1场高峰论坛、5个重要活动、15场分论坛/座谈会/闭门会、6个主题日活动和网络安全“六进”活动。亚信安全出席2024年国家网络安全宣传周开幕式和主论坛,并将通过线下宣讲、创意科普、成果展示等多种形式,让广大民众看得懂、记得住安全知识,同时还

c++习题30-求10000以内N的阶乘

目录 一,题目  二,思路 三,代码    一,题目  描述 求10000以内n的阶乘。 输入描述 只有一行输入,整数n(0≤n≤10000)。 输出描述 一行,即n!的值。 用例输入 1  4 用例输出 1  24   二,思路 n    n!           0    1 1    1*1=1 2    1*2=2 3    2*3=6 4

嵌入式面试经典30问:二

1. 嵌入式系统中,如何选择合适的微控制器或微处理器? 在嵌入式系统中选择合适的微控制器(MCU)或微处理器(MPU)时,需要考虑多个因素以确保所选组件能够满足项目的具体需求。以下是一些关键步骤和考虑因素: 1.1 确定项目需求 性能要求:根据项目的复杂度、处理速度和数据吞吐量等要求,确定所需的处理器性能。功耗:评估系统的功耗需求,选择低功耗的MCU或MPU以延长电池寿命或减少能源消耗。成本

【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)

您的点赞收藏是我继续更新的最大动力! 一定要点击如下的卡片,那是获取资料的入口! 【全网最全】2024年数学建模国赛A题30页完整建模文档+17页成品论文+保奖matla代码+可视化图表等(后续会更新)「首先来看看目前已有的资料,还会不断更新哦~一次购买,后续不会再被收费哦,保证是全网最全资源,随着后续内容更新,价格会上涨,越早购买,价格越低,让大家再也不需要到处买断片资料啦~💰💸👋」�

JobScheduler 调用导致的运行时长30分钟的功耗问题

一、SDK 的使用情况与功耗影响 案例是否导致功耗变大onStartJob return true 且子线程没有调用jobFinished()告知系统功耗变大,最长带来30分钟的partial wakelock 长持锁onStartJob return true 且子线程调用jobFinished()告知系统功耗有影响,主要线程执行时长,标准是30秒内onStartJob return fals

嵌入式面试经典30问:一

什么是嵌入式系统? 嵌入式系统是指嵌入到某个对象体系中的专用计算机系统,它负责执行特定的任务,具有专用性、隐蔽性、资源受限和可靠性要求高等特点。通常包括硬件和软件两部分,硬件以微处理器为核心,软件则负责控制和管理硬件资源,实现特定的应用功能。 嵌入式系统和普通计算机系统有什么区别? 嵌入式系统与普通计算机系统的主要区别在于目的、资源、性能和成本等方面。嵌入式系统通常针对特定应用设计,具有体积小

【IEEE出版】2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛(NPSIF 2024,10月30-11月1)

2024博鳌新型电力系统国际论坛——电力系统与新能源技术创新论坛将于2024年10月30-11月1日于海南博鳌举办。 会议的历史悠久,致力于促进电力系统领域的研究和开发活动,同时也着眼于促进全球各地研究人员、开发人员、工程师、学生和从业人员之间的科学信息交流,推动新能源技术的创新和应用,为全球能源领域的可持续发展贡献力量。期待着各方专家学者的共同参与和卓越贡献,共同开创电力系统未来的新篇章。

涉密电脑插U盘会不会被发现?如何禁止涉密电脑插U盘?30秒读懂!

在涉密电脑插U盘的那一瞬间,你是否也好奇会不会被发现?涉密电脑的安全监控可是滴水不漏的!想知道如何彻底禁止涉密电脑插U盘?简单几招搞定,轻松锁死外部设备,信息安全无懈可击! 涉密电脑插U盘会不会被发现? 涉密电脑是否会在插入U盘时被发现,需要根据具体情况来判断。在一些情况下,涉密电脑可能没有安装任何监控软件或安全工具,插入U盘可能不会立即触发警告。然而,随着信息安全管理的不断升级,越来越多

【anaconda 环境搭建】环境搭建python快速30分钟

1、下载anaconda https://repo.anaconda.com/archive/index.html 选择下载 Anaconda3-2019.10-Linux-x86_64.sh 2、安装linux 工具4个,上传,下载,解压,打包 yum install zip yum install unzip yum install lrzsz Yum install wget 3、r