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

【PTA数据结构 | C语言版】斜堆的合并操作

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

文章目录

    • 题目
    • 代码

题目

请将给定数据顺次插入初始为空的斜堆,用此法建立两个斜堆,再将两堆合并。为了验证结果的正确性,输出结果堆的前序和中序遍历序列。

输入格式:
输入先后给出两个堆的元素。每个堆元素输入的格式为:首先在一行中给出正整数 n(≤1000),即元素个数;随后一行给出 n 个元素的整数键值,范围不超过 int 型整数。

输出格式:
首先按照前序遍历、其次按照中序遍历,输出合并后堆的元素,格式为每个元素占一行。

输入样例:
8
17 26 8 3 10 21 14 23
8
7 37 18 6 12 18 24 33

输出样例:
3
6
10
12
24
14
7
18
33
18
37
8
17
23
26
21
24
12
10
14
6
33
18
7
37
18
3
23
17
26
8
21

代码

#include <stdio.h>
#include <stdlib.h>// 定义斜堆节点结构
typedef struct TreeNode *SkewHeap;
struct TreeNode {int key;         // 键值SkewHeap left;   // 左子树SkewHeap right;  // 右子树
};// 创建新节点
SkewHeap CreateNode(int key) {SkewHeap newNode = (SkewHeap)malloc(sizeof(struct TreeNode));newNode->key = key;newNode->left = NULL;newNode->right = NULL;return newNode;
}// 合并两个斜堆
SkewHeap Merge(SkewHeap H1, SkewHeap H2) {if (H1 == NULL) return H2;if (H2 == NULL) return H1;// 确保H1的键值小于等于H2的键值if (H1->key > H2->key) {SkewHeap temp = H1;H1 = H2;H2 = temp;}// 递归合并到右子树H1->right = Merge(H1->right, H2);// 交换左右子树SkewHeap temp = H1->left;H1->left = H1->right;H1->right = temp;return H1;
}// 插入节点到斜堆
SkewHeap Insert(SkewHeap H, int key) {SkewHeap newNode = CreateNode(key);return Merge(H, newNode);
}// 前序遍历
void PreOrder(SkewHeap H) {if (H != NULL) {printf("%d\n", H->key);PreOrder(H->left);PreOrder(H->right);}
}// 中序遍历
void InOrder(SkewHeap H) {if (H != NULL) {InOrder(H->left);printf("%d\n", H->key);InOrder(H->right);}
}int main() {SkewHeap H1 = NULL, H2 = NULL;int n, key;int i;// 读取第一个堆的数据scanf("%d", &n);for (i = 0; i < n; i++) {scanf("%d", &key);H1 = Insert(H1, key);}// 读取第二个堆的数据scanf("%d", &n);for (i = 0; i < n; i++) {scanf("%d", &key);H2 = Insert(H2, key);}// 合并两个堆SkewHeap mergedHeap = Merge(H1, H2);// 输出前序遍历PreOrder(mergedHeap);// 输出中序遍历InOrder(mergedHeap);return 0;
}    
http://www.dtcms.com/a/285713.html

相关文章:

  • Expression.Block详解
  • 微信小程序商品结算功能
  • gitlab-ce本地化部署
  • 一文讲清楚React的render优化,包括shouldComponentUpdate、PureComponent和memo
  • 在 React 中根据数值动态设置 SVG 线条粗细
  • Linux | Bash 子字符串提取
  • Java 8 Stream 流操作大全:从入门到实战全覆盖(附案例)
  • 【软件系统架构】系列七:系统性能——计算机性能深入解析
  • 【机器人】HOV-SG 开放词汇 | 分层3D场景图 | 语言引导机器人导航
  • DNN平台因恶意交互导致NTLM哈希泄露漏洞(CVE-2025-52488)
  • ​​Docker 速通教程
  • 用Python实现神经网络(四)
  • 【大模型:知识图谱】--6.Neo4j DeskTop安装+使用
  • 数字化转型:概念性名词浅谈(第三十讲)
  • JAVA面试宝典 -《Elasticsearch 深度调优实战》
  • OpenAI发布通用智能体ChatGPT Agent:实现自主思考、联网与工具调用,智能体赛道大变天!
  • Java 大视界 -- Java 大数据在智能医疗电子健康档案数据挖掘与健康服务创新中的应用(350)
  • QCustomPlot 使用教程
  • 【Linux】基本指令(入门篇)(上)
  • SOES:软实现EtherCAT从站协议栈项目介绍及从站开发案例
  • 【Python】SQLAlchemy实现upsert
  • 【Linux网络编程】应用层协议 - HTTP
  • uniapp 动态控制横屏(APP 端)
  • Bitbucket平台的HTTP Access Tokens操作手册
  • 开发避坑短篇(2):uni-app微信小程序开发‘createIndependentPlugin‘模块缺失问题分析与解决方案
  • 创蓝闪验SDK适配uniappx版本UTS插件集成文档
  • Redis缓存双写的学习(五)
  • Python暑期学习笔记5
  • 平板可以用来办公吗?从文档处理到创意创作的全面测评
  • JavaScript 的垃圾回收机制