首页 > 其他分享 >浙大数据结构慕课课后题(03-树2 List Leaves)

浙大数据结构慕课课后题(03-树2 List Leaves)

时间:2024-08-09 11:52:22浏览次数:15  
标签:03 结点 课课 vis ++ Leaves tree int rear

题目要求:

给定一棵树,您应该按照从上到下、从左到右的顺序列出所有叶子。

输入规格: 

每个输入文件都包含一个测试用例。对于每种情况,第一行都给出一个正整数N(<=10),这是树中节点的总数 -- 因此节点的编号从 0 到N-1.然后N行紧随其后,每行对应一个节点,并给出节点的左右子节点的索引。如果孩子不存在,则会在该位置放置一个“-”。任何一对子项之间都用空格隔开。 

输出规格: 

对于每个测试用例,按照自上而下和从左到右的顺序在一行中打印所有叶子的索引。任何相邻数字之间必须只有一个空格,并且行尾不能有多余的空格。 

示例输入: 

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

示例输出: 

4 1 5 

这里附上英文原文,避免题目歧义。

 

题解: 

        思路如注释所示,可通过所有测试点。

#include<bits/stdc++.h>
using namespace std;
int main(){
	int vis[10]={0},tree[10][2];   //vis[]检查数组,用来找根节点 
	int N,Root;	                   //tree[]用来存储树的结点信息 
	cin>>N; 
	for(int i = 0;i < N;i++){
		tree[i][0] = -1;
		tree[i][1] = -1; 
	} 
	for(int i = 0;i < N;i++){
		char a,b;
		cin>>a>>b;
		a != '-' ? vis[a-'0'] = 1,tree[i][0] = a-'0':vis[a] = 0;    //记录一个结点是否为子结点 
		b != '-' ? vis[b-'0'] = 1,tree[i][1] = b-'0':vis[b] = 0;	
	} 
	
	for(int i = 0;i < N;i++){
		if(vis[i]==0) Root = i;   //不为任意结点的子结点的结点即为根结点
	}
	int front = -1,rear = -1,queue[N]={0},num=0;
	queue[rear++] = Root;
	while(front != rear){
		num++;               //已经查找过的结点数量 
		int i = queue[front++];
		if(tree[i][0]!=-1) queue[rear++] = tree[i][0];
		if(tree[i][1]!=-1) queue[rear++] = tree[i][1];	
		if(tree[i][0] == -1 && tree[i][1] == -1){
			cout<<i; 
			if(num!=N) cout<<' '; //因为遍历到最后一个结点的同时,这个结点也应该是最后一个叶子
		}	                      //结点,所以不在它后面加空格
	} 
	return 0;
}

思路:

        这道题是树的遍历中比较经典的一道题,题目意思很清楚,传统做法应该是构造一个结构体,但是像我这么懒的人看了结点数最多只有10个,我就直接用二维数组做了,初学者可以把这个做法作为传统做法的前导,关于树的一些传统的更规范的操作我也有写一篇,感兴趣朋友可以转去

浙大数据结构课后习题(04-树7 二叉搜索树的操作集)

        核心思想还是BFS,逐层遍历每个结点,输出没有子结点的结点,这里用队列来存储比较方便。输出优先级是层>左>右。

 

标签:03,结点,课课,vis,++,Leaves,tree,int,rear
From: https://blog.csdn.net/Charon_super/article/details/141057030

相关文章

  • OpenGauss部署案例之---OpenEuler 20.03部署OpenGauss企业版
    案例说明:在OpenEuler20.03系统,x86架构下部署OpenGauss5.0.1企业版单实例数据库。数据库版本:openGauss=#selectversion();version------------------------------------------------------------......
  • c#语言,SQL server数据库;基于Web的社区人员管理系统的设计与实现36303(免费领源码)计算机
    目 录摘要1绪论1.1慨述1.2课题意义1.3B/S体系结构介绍1.4ASP.NET框架介绍2 社区人员管理系统分析2.1可行性分析2.2系统流程分析2.2.1数据增加流程2.2.2数据修改流程52.2.3数据删除流程52.3系统功能分析62.3.1功能性分析62.3.2非功能性......
  • Django+记账管理系统-计算机毕设定制-附项目源码(可白嫖)50377
    摘 要本文课题研究的记账管理系统,系统的主要功能模块包括记账信息、企业类型、公告信息、公告类型等,采取面对对象的开发模式进行软件的开发和硬体的架设,能很好的满足实际使用的需求,完善了对应的软体架设以及程序编码的工作,采用Django开发框架,MySQL数据库,Ajax异步交互,根据Aj......
  • springboot在线众筹平台的设计与实现-计算机毕设定制-附项目源码(可白嫖)50388
    springboot在线在线众筹平台摘 要随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。在线众筹平台,主要的模块包括管理员和用户,实现功能包括:首页、轮播图、系统公告、资源管理(新闻列表、新闻分类)系统用户(管理员......
  • vue 中 {{ +isNeed ? '是' : '否' }} 什么意思,isNeed是 1 或 0
    在Vue.js中,双花括号{{}}用于插值操作,用来将数据绑定到模板中。在你提供的例子中:{{+isNeed?'是':'否'}}这段代码的意思是:+isNeed将变量isNeed转换为数字类型。因为isNeed是1或0,所以+isNeed将分别转换为数字1或0。?是JavaScript中的条件运算符,用于......
  • Java方法03:方法的重载
    上面使用的max方法仅仅适用于int型数据。但如果你想得到两个浮点类型数据的最大值呢?解决方法是创建另一个有相同名字但参数不同的方法,如下面代码所示:publicstaticdoublemax(doublenum1,doublenum2){ if(num1>num2){ returnnum1; }else{ returnnum2; }}......
  • UnicodeEncodeError:“ascii”编解码器无法对位置 20 中的字符 u'\xa0' 进行编码:序号
    我在处理从不同网页(在不同站点上)获取的文本中的unicode字符时遇到问题。我正在使用BeautifulSoup。问题是错误并不总是可重现的;它有时适用于某些页面,有时,它会因抛出UnicodeEncodeError而呕吐。我已经尝试了几乎所有我能想到的方法,但我还没有找到任何可以一致工作......
  • Codeforces Round 964 (Div. 4) D. Slavic's Exam
    题目链接:https://codeforces.com/contest/1999/problem/D题目描述Slavic的考试非常难,需要您的帮助才能通过。以下是他正在努力解决的问题:存在一个字符串s,它由小写英文字母和可能零个或多个“?”组成。Slavic被要求将每个“?”更改为小写英文字母,使得字符串t成为字符串s的......
  • 重学面向对象-基础篇03封装、继承和多态
    封装、继承和多态基础概念封装:把对象的属性和方法结合城一个独立的整体,隐藏实现细节,并提供对外访问的接口继承:从已知的一个类中派生出一个新的类,叫子类。子类实现了父类所有非私有化的属性和方法,并根据实际需求扩展出新的行为多态:多个不同的对象对同一消息作出响应,同一消息根......
  • 基于STM32F103的FreeRTOS系列(七)·任务创建·列表的使用超详细解析
    目录1. 列表和列表项1.1 列表和列表项简介1.1.1  列表1.1.2  列表项1.1.3  迷你列表项1.1.4 列表与列表项关系图1.2 列表初始化1.3 列表项的初始化1.4 列表项的插入函数1.5 列表项的末尾插入1.6 列表项的删除1.7 列表的遍历1. 列表......