有根树【东北大学oj数据结构7-1】C语言

news/2024/12/17 4:56:34/

创建一个程序,为给定的有根树 T 的每个节点 u 输出以下信息。

u的节点号
u的父节点号
u的深度
u的节点类型(根、内部节点或叶)
u的孩子名单
这里我们假设给定的树有n个节点,每个节点都分配了一个从0到n-1的数字。

输入

输入的第一行给出节点数 n。在接下来的第 n 行,每个节点的信息按以下格式在一行中给出。
idkc1​c2​...ck​

id 是节点号,k 是顺序。 c1​c2​...ck​ 表示第一个子节点的节点号,... 表示第k 个子节点的节点号。

输出

按照以下格式输出节点信息。按编号升序输出节点信息。

node id: parent = p, depth = d, type, [c1...ck]

p 表示父编号。但是,如果您没有父级,请将其设置为 -1。 d 表示节点的深度。
type 是分别代表根、内部节点和叶的根、内部节点或叶字符串之一。但是,如果根满足叶子和内部节点的条件,则应该是根。
c1​c2​...ck​ 是一个孩子的列表。请将其视为一个序列树,并按照输入的顺序输出。请注意逗号空格分隔符。检查输出示例中的输出格式。

数据约束

1 ≤ n ≤ 100,000
节点深度不超过20。
任何两个节点之间总是有一条路径。

输入样例

13
0 3 1 4 10
1 2 2 3
2 0
3 0
4 3 5 6 7
5 0
6 0
7 2 8 9
8 0
9 0
10 2 11 12
11 0
12 0

输出样例

node 0: parent = -1, depth = 0, root, [1, 4, 10]
node 1: parent = 0, depth = 1, internal node, [2, 3]
node 2: parent = 1, depth = 2, leaf, []
node 3: parent = 1, depth = 2, leaf, []
node 4: parent = 0, depth = 1, internal node, [5, 6, 7]
node 5: parent = 4, depth = 2, leaf, []
node 6: parent = 4, depth = 2, leaf, []
node 7: parent = 4, depth = 2, internal node, [8, 9]
node 8: parent = 7, depth = 3, leaf, []
node 9: parent = 7, depth = 3, leaf, []
node 10: parent = 0, depth = 1, internal node, [11, 12]
node 11: parent = 10, depth = 2, leaf, []
node 12: parent = 10, depth = 2, leaf, []

#include <stdio.h>
#define MAX 100005
#define NIL -1// 定义树的节点结构
struct Node {int p, l, r;  // p 是父节点, l 是子节点, r 是右侧兄弟节点
};struct Node T[MAX];  // 树节点数组
int D[MAX];  // 存储每个节点的深度
int n;  // 节点的数量// 打印一个节点的信息
void print(int u) {int i, c;printf("node %d: ", u);printf("parent = %d, ", T[u].p);printf("depth = %d, ", D[u]);if (T[u].p == NIL) {printf("root, ");} else if (T[u].l == NIL) {printf("leaf, ");} else {printf("internal node, ");}printf("[");for (i = 0, c = T[u].l; c != NIL; i++, c = T[c].r) {if (i) {printf(", ");}printf("%d", c);}printf("]\n");
}// 递归计算每个节点的深度
void rec(int u, int p) {D[u] = p;if (T[u].r != NIL) {rec(T[u].r, p);  // 先递归右子树}if (T[u].l != NIL) {rec(T[u].l, p + 1);  // 再递归左子树}
}int main() {int i, j, d, v, c, l, r;// 读入节点数量scanf("%d", &n);// 初始化所有节点的父节点、左子节点、右子节点为 NILfor (i = 0; i < n; i++) {T[i].p = T[i].l = T[i].r = NIL;}// 构建树for (i = 0; i < n; i++) {scanf("%d %d", &v, &d);  // 输入当前节点编号和子节点数量l = NIL;  // 初始化左子节点的指针for (j = 0; j < d; j++) {scanf("%d", &c);  // 输入当前节点的子节点if (j == 0) {T[v].l = c;  // 第一个子节点是左子节点} else {T[l].r = c;  // 后续子节点是右子节点}l = c;  // 更新左子节点T[c].p = v;  // 设置当前子节点的父节点}}// 找到根节点(父节点是 NIL)for (i = 0; i < n; i++) {if (T[i].p == NIL) {r = i;  // 根节点break;}}// 计算每个节点的深度rec(r, 0);// 输出每个节点的信息for (i = 0; i < n; i++) {print(i);}return 0;
}

 

 


http://www.ppmy.cn/news/1555773.html

相关文章

WPF+MVVM案例实战与特效(三十八)- 封装一个自定义的数字滚动显示控件

文章目录 1、运行效果2、案例实现1、功能设计2、页面布局3、控件使用4、运行效果3、拓展:多数字自定义控件1、控件应用4、总结1、运行效果 在Windows Presentation Foundation (WPF)应用程序中,自定义控件允许开发者创建具有特定功能和外观的独特UI元素。本博客将介绍一个名…

Python 命令搭建 Https的服务器

要使用Python命令行搭建HTTPS服务器&#xff0c;您可以使用http.server模块&#xff08;在Python 3.x中可用&#xff09;&#xff0c;并结合ssl模块来创建安全的HTTPS连接。以下是一个简单的步骤指南&#xff1a; 准备证书&#xff1a; 在搭建HTTPS服务器之前&#xff0c;您需要…

Android仿闲鱼发布弹簧动画

Android仿闲鱼发布弹簧动画 仿闲鱼发布的弹簧动画显示弹框&#xff0c;效果还不错 一、思路&#xff1a; 用SpringAnimation动画 二、效果图&#xff1a; 看视频更直观点&#xff1a; Android开发案例分享仿闲鱼发布弹簧动画 三、关键代码&#xff1a; public class MoodP…

OpenCV--图像查找

OpenCV--图像查找 代码和笔记 代码和笔记 import cv2 import numpy as np""" 图像查找--特征匹配的应用&#xff0c;通过特征匹配和单应性矩阵 单应性变换&#xff1a;描述物体在世界坐标系&#xff08;原图&#xff09;和像素坐标系&#xff08;对比图&#x…

手机膜介绍

因为自己开店的原因&#xff0c;现在每天都在对不同的货进行对比&#xff0c;一直在发库存&#xff0c;库存的文章基本也都发没了&#xff0c;所以开始分享开店过程中遇到的事&#xff0c;来给大家介绍一下手机膜。 手机钢化膜、水凝膜、软膜和UV膜是四种常见的手机屏幕保护膜…

Docker-Dockerfile、registry

Dockerfile 一、概述 1、commit的局限 很容易制作简单的镜像&#xff0c;但碰到复杂的情况就十分不方便&#xff0c;例如碰到下面的情况&#xff1a; 需要设置默认的启动命令需要设置环境变量需要指定镜像开放某些特定的端口 2、Dockerfile是什么 Dockerfile是一种更强大的镜…

设置HP条UI

概述 设置常见的生命值条&#xff0c; 实现过程 设置UI/image作为形状 设置UI/Image作为背景 设置UI/image&#xff08;healthfill&#xff09;作为填充图片&#xff0c;层数低于背景 设置heathfill的imagetype为filled fillmethod为horizontal [SerializeField] private Im…

Artec Leo与Ray打造工厂数字孪生,提升生产线加工效率【沪敖3D】

挑战&#xff1a;勘测一条漏水的陈旧豌豆生产线&#xff0c;以便在该位置上安装全新改良系统&#xff0c;能提高新鲜农产品的利用比例 解决方案&#xff1a;Artec Leo、Artec Ray、Artec Studio、SOLIDWORKS&#xff08;带Mesh2Surface插件&#xff09; 效果&#xff1a;利用…