PTA-列出所有祖先结点

对于给定的二叉树,本题要求你按从上到下顺序输出指定结点的所有祖先结点。

输入格式:

首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。

随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 "-"。编号间以 1 个空格分隔。

最后一行给出一个结点的编号i(0≤i≤N-1)。

输出格式:

在一行中按规定顺序输出i的所有祖先结点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

7
2 -
- 6
- -
0 5
- -
4 1
- -
4

输出样例:

3 5

分析:

  1. 初始化:首先,创建一个名为BinTree的类,该类有三个属性:leftrightparent,它们都被初始化为-1。这意味着在开始时,每个节点都没有左子节点、右子节点和父节点。
  2. 创建函数create()函数用于创建二叉树。首先,它创建一个名为T的空列表,然后从标准输入读取节点数n。接下来,它通过循环n次在列表T中添加新的BinTree实例。然后,它再次从标准输入读取每个节点的左子节点和右子节点(如果存在),并更新相应的BinTree实例的属性。同时,它还设置每个节点的父节点。
  3. 查找函数find()函数用于找到给定节点的祖先节点。它首先获取要查找祖先的节点的索引root。然后,它通过不断地将当前节点的父节点设置为新的当前节点,将所有祖先节点收集到列表a中。最后,它倒序打印出祖先节点的索引。
  4. 主函数:在主函数中,首先调用create()函数创建二叉树。如果二叉树至少有两个节点,它就调用find()函数来查找并打印一个给定节点的所有祖先节点。

Python版本:

class BinTree:def __init__(self):self.left = -1self.right = -1self.parent = -1def create():T = []n = int(input())for _ in range(n):node = BinTree()T.append(node)for i in range(n):l, r = input().strip().split()if l != '-':T[i].left = int(l)T[T[i].left].parent = iif r != '-':T[i].right = int(r)T[T[i].right].parent = ireturn Tdef find(T):a = []root = int(input())while T[root].parent != -1:a.append(T[root].parent)root = T[root].parentfor i in range(len(a)-1, -1, -1):print(" " + str(a[i]) if i != len(a)-1 else str(a[i]), end='')if __name__ == '__main__':T = create()if len(T) > 1:find(T)

总结:

 这段代码主要实现了二叉树的创建和遍历。其中,二叉树节点的结构是其主要特点,而遍历则是通过追溯每个节点的父节点实现的。在创建二叉树的过程中,用户可以为其指定节点的左右子节点和父节点。在查找函数中,通过追溯父节点找到所有祖先节点,并以列表形式返回。

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

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

相关文章

谈思生物医疗直播 | 利用类器官模型研究肺的发育与稳态

类器官是一种三维细胞培养物,其在细胞类型,空间结构及生理功能上能够模拟对应器官,从而提供一个高度生理相关的系统。自2009年小肠类器官首次建立至今,类器官研究已经延伸到多个组织系统,并成为当下生命科学领域最热门…

element plus 使用细节

菜鸟一直在纠结这个写不写,因为不难,但是菜鸟老是容易忘记,虽然想想或者搜搜就可以马上写出来,但是感觉每次那样就太麻烦了,不如一股做气写了算了,后面遇见别的就再来补充! 文章目录 table 表格…

美创获IDC数据库安全市场代表厂商推荐,一路引领数据库安全

近日,全球领先的IT市场研究和咨询公司IDC发布《IDC Persepctive:中国数据库安全市场洞察,2023》报告。 凭借多年的技术积累和丰富的产品体系与行业实践,美创科技获「代表厂商」推荐,再次彰显专业领先能力! …

Mybatis一级缓存和二级缓存原理剖析与源码详解

Mybatis一级缓存和二级缓存原理剖析与源码详解 在本篇文章中,将结合示例与源码,对MyBatis中的一级缓存和二级缓存进行说明。 MyBatis版本:3.5.2 文章目录 Mybatis一级缓存和二级缓存原理剖析与源码详解⼀级缓存场景一场景二⼀级缓存原理探究…

责任链模式 (Chain of Responsibility Pattern)

定义 责任链模式是一种行为型设计模式,用于在对象间建立一条处理请求的链。它允许多个对象有机会处理请求,从而减少请求的发送者和接收者之间的耦合。在责任链模式中,每个接收者包含对另一个接收者的引用,形成一条链。如果一个对…

tcp和 udp区别

相同点:都是传输层协议 不同点 是否面向连接 tcp:面向连接 三次握手,四次挥手端对端连接全双工通信(允许双端同时收发数据) udp:无连接 无三次握手,四次挥手支持一对一,一对多,多对多 数据传输方式 …

Linux平台下使用.NET Core访问Access数据库

运行环境 操作系统:Ubuntu 22.04.3 LTS (Jammy)开发工具:Visual Studio 2022 (17.8.0)运行时版本:.NET Runtime 8.0依赖库:unixodbc、mdbtools、odbc-mdbtools 依赖库安装 apt-get update sudo apt-get install unixodbc mdbto…

部署项目时常用的 Linux 命令

目录 1 前言2 SSH登录命令3 SCP传输命令4 CP拷贝命令5 MV移动命令6 TAR解压命令7 DU查看文件夹/文件大小8 TAIL查看日志9 NOHUP后台运行10 结语 1 前言 在应用部署过程中,Linux命令是必不可少的工具。它们能够帮助我们管理文件、连接服务器、拷贝文件、查看日志以及…

vite项目配置vite.config.ts在打包过程中去除日志

在生产环境上,务必要将日志清除干净,其因有二,在webgis系统中,有很多几何数据,体积大、数量多,很容易引起系统卡顿;清除log后,系统看着舒服,协同开发有很多无聊的日志&am…

生日礼物——华为机考真题

题目描述 小牛的孩子生日快要到了,他打算给孩子买蛋糕和小礼物,蛋糕和小礼物各买一个, 他的预算不超过x元。蛋糕 Cake 和小礼物 gift 都有多种价位的可供选择。 请返回小牛共有多少种购买方案。 输入描述 第一行表示 Cake的单价, 以逗号分隔 …

字符串:leetcode1410. HTML 实体解析器

1410. HTML 实体解析器 「HTML 实体解析器」 是一种特殊的解析器,它将 HTML 代码作为输入,并用字符本身替换掉所有这些特殊的字符实体。 HTML 里这些特殊字符和它们对应的字符实体包括: 双引号:字符实体为 " &#xff…

一款非常优秀的项目管理工具:进度猫(推荐)

在项目管理中,一个好的工具可以极大地提高效率。 进度猫是一款非常优秀的项目管理工具。它具有非常强大的功能,可以帮助团队更好地管理项目进度。 通过可视化的方式,将项目进度、任务分配、需求变更等全面呈现给团队成员,让团队…

5.过滤敏感词 + 发布帖子 + 帖子详情

目录 1.过滤敏感词 1.1 定义前缀树 1.2 根据敏感词,初始化前缀树 1.3 编写过滤敏感词方法

需求分析BSA法

👉BSA法(Basic–Satisfier–Attractor)是对客户需求进行优先级划分的需求分析方法。该模型体现了需求满足度和客户满意度之间的非线性关系。BSA法将客户需求分为3种类型,分别是基本型需求、满意型需求和兴奋型需求。下面将对每种需…

ABB机 器 人 操 作 培 训

目 录 1 培训手册介绍 ---------------------------------------------2 2 系统安全与环境保护 ---------------------------------------------3 3 机器人综述 ---------------------------------------------5 4 机器人示教 --------------------------------------------12…

哲学家就餐问题(java全代码)

题目 有N个哲学家围坐在一张圆桌旁,桌上只有N把叉子,每对哲学家中间各有一把。 哲学家的两种行为: 一、思考 二、吃意大利面 哲学家只能拿起手边左边或右边的叉子 吃饭需要两把叉子 正确地模仿哲学家的行为 方法一 一次只允许四个人…

FSCTF2023-Reverse方向题解WP。学习贴

文章目录 [FSCTF 2023]signin[FSCTF 2023]MINE SWEEPER[FSCTF 2023]Xor[FSCTF 2023]EZRC4[FSCTF 2023]ez_pycxor[FSCTF 2023]Tea_apk[FSCTF 2023]ezcode[FSCTF 2023]ezbroke[FSCTF 2023]rrrrust!!![FSCTF2023]ezrev(未解决) [FSCTF 2023]signin UPX壳&am…

redis-cluster集群模式

Redis-cluster集群 1 Redis3.0引入的分布式存储方案 2集群由多个node节点组成,redis数据分布在节点之中,在集群之中分为主节点和从节点3集群模式当中,主从一一对应,数据写入和读取与主从模式一样,主负责写,从只能读4集群模式自带哨兵模式,可…

自然资源土地管理法律法规知识竞赛这么办才高端

近些年,全国各地自然资源厅举办了土地管理法律法规知识竞赛,从我公司承办的这些赛事来看,传统的必答题、抢答题、风险题的方式已无法激起现场比赛气氛,需要更加复杂有趣的环节设置及高端竞赛软件及其配套设备加持才可以让知识竞赛…

Eigen::Matrix 转 std::vector 亲测ok!

std::vector<double> data;for (int kk 0; kk < 24; kk) {data.push_back(kk);}int n 24 / 3;typedef Eigen::Matrix<double, 3, Eigen::Dynamic> MatrixXd;//vector 转 matrixEigen::Map<Eigen::MatrixXd> result(data.data(), 3, n);//matrix 转 vect…