树的存储结构-孩子表示法(C语言代码)

#define MAX_SIZE 50
typedef struct Childnode
{int child;struct Childnode* next;
}ChildPtr;
typedef struct
{char data;ChildPtr* firstchild;
}CTBox;
typedef struct
{CTBox tnode[MAX_SIZE];int n, r;
}CTree;
CTree initTree(CTree tree)
{printf("请输入节点个数\n");scanf("%d", &(tree.n));for (int i = 0; i < tree.n; i++){printf("请输入第 %d 个节点的值\n", i + 1);getchar();scanf("%c", &(tree.tnode[i].data));tree.tnode[i].firstchild = (ChildPtr*)malloc(sizeof(ChildPtr));tree.tnode[i].firstchild->next = NULL;printf("请输入节点 %c 的孩子节点数量\n", tree.tnode[i].data);int Num;scanf("%d", &Num);if (Num!=0){ChildPtr* p = tree.tnode[i].firstchild;for (int j = 0; j < Num; j++){ChildPtr* newnode = (ChildPtr*)malloc(sizeof(ChildPtr));newnode->next = NULL;printf("请输入第%d个孩子节点在顺序表中的位置\n", j + 1);scanf("%d", &(newnode->child));p->next = newnode;p = p->next;}}}return tree;
}
void findkids(CTree tree, char a)
{int temp = 0;for (int i = 0; i < tree.n; i++){if (tree.tnode[i].data == a){ChildPtr* p = tree.tnode[i].firstchild->next;while (p){temp = 1;printf("%c ", tree.tnode[p->child].data);//p->child是节点在顺序表中的位置p = p->next;}break;}}if (temp == 0){printf("%c无孩子节点\n", a);}
}
int main()
{CTree tree;for (int i = 0; i < MAX_SIZE; i++){tree.tnode[i].firstchild = NULL;}tree = initTree(tree);tree.r = 0;//默认根节点在snode数组[0]的位置printf("F的所有孩子节点为:\n");findkids(tree, 'F');return 0;
}

请输入节点个数
10
请输入第 1 个节点的值
R
请输入节点 R 的孩子节点数量
3
请输入第1个孩子节点在顺序表中的位置
1
请输入第2个孩子节点在顺序表中的位置
2
请输入第3个孩子节点在顺序表中的位置
3
请输入第 2 个节点的值
A
请输入节点 A 的孩子节点数量
2
请输入第1个孩子节点在顺序表中的位置
4
请输入第2个孩子节点在顺序表中的位置
5
请输入第 3 个节点的值
B
请输入节点 B 的孩子节点数量
0
请输入第 4 个节点的值
C
请输入节点 C 的孩子节点数量
1
请输入第1个孩子节点在顺序表中的位置
6
请输入第 5 个节点的值
D
请输入节点 D 的孩子节点数量
0
请输入第 6 个节点的值
E
请输入节点 E 的孩子节点数量
0
请输入第 7 个节点的值
F
请输入节点 F 的孩子节点数量
3
请输入第1个孩子节点在顺序表中的位置
7
请输入第2个孩子节点在顺序表中的位置
8
请输入第3个孩子节点在顺序表中的位置
9
请输入第 8 个节点的值
G
请输入节点 G 的孩子节点数量
0
请输入第 9 个节点的值
H
请输入节点 H 的孩子节点数量
0
请输入第 10 个节点的值
K
请输入节点 K 的孩子节点数量
0
F的所有孩子节点为:
G H K

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/441198.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PHP 基础语法详解

PHP 基础语法详解 PHP&#xff08;全称&#xff1a;PHP: Hypertext Preprocessor&#xff09;是一种广泛应用的服务器端脚本语言&#xff0c;特别适用于 Web 开发。它易于学习&#xff0c;且能够快速构建动态网站。本篇博客将详细介绍 PHP 的基础语法&#xff0c;帮助初学者理…

[OS] 编译 Linux 内核

编译 Linux 内核&#xff1a;详细教程与 Kthreads 入门结合 我们将学习如何编译 Linux 内核&#xff0c;同时结合 Kthreads 的知识来理解各个步骤的目的。对于虚拟环境下的开发环境配置&#xff0c;本文将为你提供逐步指导。 1. 下载内核源代码 首先&#xff0c;我们需要从官…

第 1 章 MyBatis快速入门

1.1 ORM简介 ORM&#xff08;Object Relational Mapping&#xff0c;对象——关系映射&#xff09;框架的主要功能是根据映射配置文件&#xff0c;完成数据在对象模型与关系模型之间的映射&#xff0c;同时出屏蔽了连接数据库、创建 Statement 对象、执行 SQL、读取 ResultSet…

(Linux驱动学习 - 8).信号异步通知

一.异步通知简介 1.信号简介 信号类似于我们硬件上使用的“中断”&#xff0c;只不过信号是软件层次上的。算是在软件层次上对中断的一种模拟&#xff0c;驱动可以通过主动向应用程序发送信号的方式来报告自己可以访问了&#xff0c;应用程序获取到信号以后就可以从驱动设备中…

【技术】Jaskson的序列化与反序列化

文章目录 概念解释1.Jasksona.JSONJSON 的基本特点JSON 的基本结构JSON 示例 b.ObjectMapper类 2.序列化与反序列化a.序列化对象序列化集合序列化ListSetMap b.反序列化反序列化单个对象反序列化集合对象 概念解释 1.Jaskson Jackson 是一个用于处理 JSON 数据的 Java 库,所以…

k8s实战-1

k8s实战-1 一、资源创建方式1.命令行2.yaml 二、命名空间三、Pod总结 一、资源创建方式 1.命令行 就是直接通过命令的方式创建&#xff0c;比如我要创建namespace&#xff0c; kubectl create namespace hello删除&#xff1a; kubectl delete -f hello2.yaml 简单来说&am…

用java编写飞机大战

游戏界面使用JFrame和JPanel构建。背景图通过BG类绘制。英雄机和敌机在界面上显示并移动。子弹从英雄机发射并在屏幕上移动。游戏有四种状态&#xff1a;READY、RUNNING、PAUSE、GAMEOVER。状态通过鼠标点击进行切换&#xff1a;点击开始游戏&#xff08;从READY变为RUNNING&am…

无人机单目+激光+IMU复杂弧形(隧道)退化场景SLAM技术详解

无人机在复杂弧形&#xff08;如隧道&#xff09;退化场景中的SLAM&#xff08;同时定位与地图构建&#xff09;技术&#xff0c;结合单目相机、激光雷达&#xff08;LiDAR&#xff09;和惯性测量单元&#xff08;IMU&#xff09;时&#xff0c;能够显著提升定位与建图的准确性…

在忘记密码的情况下重新访问手机?5种忘记密码解锁Android手机的方法

无需密码即可访问Android手机。 即使你忘记了密码&#xff0c;你也可以解锁你的Android手机&#xff0c;但你通常需要将手机恢复出厂设置。 您可以通过执行出厂恢复或使用“查找我的设备”网站解锁大多数Android手机。 如果你不再有密码&#xff0c;这里有五种解锁安卓手机的…

E37.【C语言】动态内存管理练习题

目录 1. 答案速查 分析 源代码分析 反汇编代码分析(底层) 2. 答案速查 分析 3. 答案速查 分析 VS逐步调试 1. 求下列代码的执行结果 #include <stdio.h> char* GetMemory(void) {char p[] "hello world";return p; }void Test(void) {char* str…

分层解耦-03.IOCDI-入门

一. IOC&DI入门 二.控制转移注解Component 因为dao和service接口的实现类对象需要传入到service和controller中&#xff0c;因此需要将dao和service代码加上Component注解&#xff0c;使之实现控制反转&#xff0c;将实现类对象交给IOC容器管理&#xff0c;成为IOC容器中…

Web安全 - 阶段性总结回顾_风险评估

文章目录 OWASP 2023 TOP 10用户数据的威胁评估密码盗窃XSS 漏洞SQL 注入CSRF 漏洞 资产数据的威胁评估SSRF 漏洞反序列化漏洞插件漏洞后门 认证和授权的安全防护检测与过滤加强认证补丁管理 进一步防护手段最小权限原则WAFIDS 小结 OWASP 2023 TOP 10 OWASP Top 10 概述 OWASP…

数据结构与算法——动态规划算法简析

1.初步了解动态规划 由于本篇博客属于动态规划的初阶学习&#xff0c;所以大多都是简单的表示&#xff0c;更深层次的学术用语会在之后深度学习动态规划之后出现&#xff0c;本文主要是带各位了解一下动态规划的大致框架 1.1状态表示 通常的我们会开辟一个dp数组来存储需要表示…

C++ WebDriver扩展

概述 WebDriver协议基于HTTP&#xff0c;使用JSON进行数据传输&#xff0c;定义了client与driver之间的通信标准。无论client的实现语言&#xff08;如Java或C#&#xff09;&#xff0c;都能通过协议中的endpoints准确指示driver执行各种操作&#xff0c;覆盖了Selenium的所有功…

【C语言】预处理指令详解

目录 一、预定义符号 二、#define 定义常量 三、#define 定义宏 &#xff08;1&#xff09;宏定义的使用 &#xff08;2&#xff09;带副作用的宏参数 &#xff08;3&#xff09;宏替换的规则 &#xff08;4&#xff09;宏与函数对比 &#xff08;5&#xff09;#和## …

基于单片机的书库环境监测

目录 一、主要功能 二、硬件资源 三、程序编程 四、实现现象 一、主要功能 基于51单片机&#xff0c;采用DHT11湿度传感器检测湿度&#xff0c;DS18B20温度传感器检测温度&#xff0c; 采用滑动变阻器连接数模转换器模拟二氧化碳和氧气浓度检测&#xff0c;各项数值通过lc…

SQL第12课——联结表

三点&#xff1a;什么是联结&#xff1f;为什么使用联结&#xff1f;如何编写使用联结的select语句 12.1 联结 SQL最强大的功能之一就是能在数据查询的执行中联结&#xff08;join)表。联结是利用SQL的select能执行的最重要的操作。 在使用联结前&#xff0c;需要了解关系表…

免费高可用软件

高可用软件是指那些能够提供高可用性、高可靠性的软件&#xff0c;它们在各种应用场景下都能确保系统的稳定运行。以下是四款免费的高可用软件&#xff0c;它们在不同领域都表现出色&#xff0c;能够满足各种高可用性需求。 一、PanguHA PanguHA是一款专为Windows平台设计的双…

使用正则表达式删除文本的奇数行或者偶数行

用智谱清言和kimi搜出来的结果都没法在notepad生效&#xff0c;后面在overflow上找到的答案比较靠谱。 查找&#xff1a;^[^\n]*\n([^\n]*) 替换&#xff1a;\1 删除偶数行 查找&#xff1a;^([^\n]*)\n[^\n]* 替换&#xff1a;\1 代码解释 ^&#xff1a;这个符号代表字符…

RabbitMQ 集群

文章目录 集群搭建使用 Docker-Compose 镜像队列搭建步骤工作原理镜像策略主从同步 同步延迟 集群搭建 参考&#xff1a; docker中安装并启动rabbitMQ Docker中搭建RabbitMQ集群 使用 Docker-Compose 这里提供一个脚本来使用 docker-compose 完成RabbitMQ集群的配置及启动…