当前位置: 首页 > news >正文

【PTA数据结构 | C语言版】是不是堆

本专栏持续输出数据结构题目集,欢迎订阅。

文章目录

    • 题目
    • 代码

题目

给定一个完全二叉树的层序遍历序列,请判断该二叉树是否是二叉堆。

输入格式:
每组测试第 1 行包含 2 个正整数:m (≤100) 是二叉树的个数;n(1<n≤1000)是每个二叉树中结点的个数。随后 m 行,每行给出 n 个不重复的整数键值(均在 32 位整型 int 范围内),是一个完全二叉树的层序遍历序列。

输出格式:
对每个输入中给定的二叉树,如果其对应了一个最大堆,则在一行中输出 Max Heap;如果对应最小堆,则输出 Min Heap;否则输出 Not Heap。随后在下一行输出这棵树的后序遍历序列。一行中的数字间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:
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

输出样例:
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

代码

#include <stdio.h>
#include <stdlib.h>#define MAXN 1001int tree[MAXN];
int n;// 判断是否为最大堆
int isMaxHeap() {for (int i = 1; i <= n/2; i++) {int left = 2 * i;int right = 2 * i + 1;if (left <= n && tree[i] < tree[left]) return 0;if (right <= n && tree[i] < tree[right]) return 0;}return 1;
}// 判断是否为最小堆
int isMinHeap() {for (int i = 1; i <= n/2; i++) {int left = 2 * i;int right = 2 * i + 1;if (left <= n && tree[i] > tree[left]) return 0;if (right <= n && tree[i] > tree[right]) return 0;}return 1;
}// 后序遍历二叉树
void postOrder(int root, int *index, int *result) {if (root > n) return;postOrder(2 * root, index, result);       // 遍历左子树postOrder(2 * root + 1, index, result);   // 遍历右子树result[(*index)++] = tree[root];          // 访问根节点
}int main() {int m;scanf("%d %d", &m, &n);for (int i = 0; i < m; i++) {// 读取层序遍历序列for (int j = 1; j <= n; j++) {scanf("%d", &tree[j]);}// 判断堆的类型if (isMaxHeap()) {printf("Max Heap\n");} else if (isMinHeap()) {printf("Min Heap\n");} else {printf("Not Heap\n");}// 后序遍历int result[MAXN];int index = 0;postOrder(1, &index, result);// 输出后序遍历结果for (int k = 0; k < n; k++) {if (k > 0) printf(" ");printf("%d", result[k]);}printf("\n");}return 0;
}    
http://www.xdnf.cn/news/1157545.html

相关文章:

  • SpringBoot集成Skywalking链路跟踪
  • 2025年渗透测试面试题总结-2025年HW(护网面试) 59(题目+回答)
  • 奥比中光双目摄像头实现物品抓取的机器人系统
  • 【Lua】多脚本引用
  • 数据结构 | 栈:构建高效数据处理的基石
  • Docker Compose
  • LeetCode 198 打家劫舍 LeetCode 213.打家劫舍II
  • Kotlin函数式接口
  • 力扣:动态规划java
  • kotlin Flow快速学习2025
  • 算法训练营DAY36 第九章 动态规划part04
  • Request和Response相关介绍
  • 数字图像处理(四:图像如果当作矩阵,那加减乘除处理了矩阵,那图像咋变):从LED冬奥会、奥运会及春晚等等大屏,到手机小屏,快来挖一挖里面都有什么
  • 《计算机网络》实验报告三 UDP协议分析
  • STM32-第八节-TIM定时器-4(编码器接口)
  • C++虚函数易错点整理
  • Python dataclass 高阶用法与技巧
  • springboot-profile
  • Direct3D 11学习(一)
  • 数学专业转行做大数据容易吗?需要补什么?
  • Web服务压力测试工具hey学习一:使用方法
  • 如何解决pip安装报错error subprocess-exited-with-error问题
  • 力扣面试150题--搜索插入位置
  • 30天打牢数模基础-灰色预测模型讲解
  • BLIP、InternVL Series(下)
  • Eureka+LoadBalancer实现服务注册与发现
  • JavaScript 对象操作、继承与模块化实现
  • RCE随笔(1)
  • 使用 Pyecharts 绘制精美饼状图:从基础到高级技巧
  • 【LeetCode 热题 100】236. 二叉树的最近公共祖先——DFS