03-树2 List Leaves(浙大数据结构PTA习题)

news/2024/9/24 6:09:23/

03-树2 List Leaves

分数 25        全屏浏览        切换布局        作者 陈越        单位 浙江大学

Given a tree, you are supposed to list all the leaves in the order of top down, and left to right.

Input Specification:

Each input file contains one test case. For each case, the first line gives a positive integer N (≤10) which is the total number of nodes in the tree -- and hence the nodes are numbered from 0 to N−1. Then N lines follow, each corresponds to a node, and gives the indices of the left and right children of the node. If the child does not exist, a "-" will be put at the position. Any pair of children are separated by a space.

Output Specification:

For each test case, print in one line all the leaves' indices in the order of top down, and left to right. There must be exactly one space between any adjacent numbers, and no extra space at the end of the line.

Sample Input:

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

Sample Output:

4 1 5

代码长度限制:16 KB        时间限制:400 ms        内存限制:64 MB

题目解析:

题目大意:给定一系列树的结点,按照从上到下,从左到右的顺序输出这棵树的叶子结点

关键点1:找到树的根结点

        

关键点2:根据树的根结点以及其它一系列结点构建树

         采用递归的思路,如果根结点的左子树不为空,则递归构建左子树,否则为NULL;如果根结点的右子树不为空,则递归构建右子树,否则为NULL;

关键点3:按照从上到下,从左到右的顺序输出这棵树的叶子结点

        本质是树的层序遍历问题,借助队列实现;

参考代码:

# include<stdio.h>
# include<stdbool.h>
# include<stdlib.h>
# define MAXNODE 10 typedef char ElementType;typedef struct TreeNode* Tree;
struct TreeNode{ElementType info,left,right;Tree Left;Tree Right;
};Tree Create(); 
Tree InitialTree(Tree Array[],int N);
Tree CreateTree(Tree Array[],Tree Root);
void InOrderPrint(Tree tree);int main(){// 根据输入创建树 Tree tree = Create();// 对这棵树进行层序遍历,并输出叶子结点InOrderPrint(tree); return 0;
}// 对一棵树进行层序遍历,并输出叶子结点
void InOrderPrint(Tree tree){// 创建一个结点指针队列	Tree Queue[MAXNODE];int Rear=-1, Head = -1;// 压入根结点Queue[++Rear] = tree;// 用于格式化输出的统计int count = 0; while(Rear!=Head){// 从队列出队一个结点,并判读是否是叶节点 Tree tmp = Queue[++Head];if(tmp->Left == NULL && tmp->Right==NULL){if(count==0){printf("%d",tmp->info-'0');count++;}else printf(" %d",tmp->info-'0');}// 分别压入其左右结点(若不为空)if(tmp->Left)Queue[++Rear] = tmp->Left;if(tmp->Right)Queue[++Rear] = tmp->Right; } return;} // 根据输入创建一棵树
Tree Create(){int N;scanf("%d",&N);getchar();if(N==0)return NULL;Tree Array[N];// 将信息存入指针数组中并获得树的根结点Tree Root = InitialTree(Array,N);// 通过树的根结点来建立树 Tree tree = CreateTree(Array,Root);return tree; 
} // 将结点信息存入指针数组中,并返回树的根结点 
Tree InitialTree(Tree Array[],int N){// Check数组用来标记结点是否作为了子节点 int i,Check[N];for(i=0;i<N;i++)Check[i] = 1;// 读入结点信息,并判读每个结点是否作为了子节点 for(i=0;i<N;i++){Tree node = (Tree)malloc(sizeof(struct TreeNode));node->info = '0'+i;node->left = getchar();if(node->left!='-')Check[node->left-'0'] = 0;getchar();node->right = getchar();if(node->right!='-')Check[node->right-'0'] = 0;getchar();node->Left = node->Right = NULL;Array[i] = node;}for(i=0;i<N;i++){if(Check[i]==1)break;}return Array[i];
}// 根据指针数组及根结点递归构建一棵树
Tree CreateTree(Tree Array[],Tree Root){int i,count;// 递归构建左子树 if(Root->left == '-'){Root->Left = NULL;}else{Root->Left = CreateTree(Array,Array[Root->left-'0']);}// 递归构建右子树if(Root->right == '-'){Root->Right = NULL;}else{Root->Right = CreateTree(Array,Array[Root->right-'0']);}return Root;
} 

运行结果:


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

相关文章

探索Web前端三大主流框架:Angular、React和Vue.js

探索Web前端三大主流框架&#xff1a;Angular、React和Vue.js 在现代Web开发中&#xff0c;前端框架已经成为开发者构建复杂应用的重要工具。Angular、React和Vue.js是目前最受欢迎的三大前端框架&#xff0c;它们各具特色&#xff0c;适用于不同的开发需求。本文将详细介绍这…

在Three.js中实现模型点击高亮:整合EffectComposer与OutlinePass的终极指南

效果【后期实现鼠标点击选中轮廓后给出一个弹窗显示相应的模型信息】 标签指示线参考我的上一篇文章 引言 Three.js不仅让WebGL的3D图形编程变得简单易懂&#xff0c;还通过其强大的扩展库支持丰富的后期处理效果&#xff0c;为3D场景增添无限魅力。本篇文章将引导您深入了…

6月软考新通知:24下集成大概率是中级蕞简单的一门

2024下半年软考6月新通知&#xff1a; 一、24下软考考试时间安排&#xff1a; 24下半年软考报名时间&#xff1a;8月19日-9月15日 24下半年软考考试时间&#xff1a;11月9-12日 24下半年软考成绩查询&#xff1a;12月中&#xff08;预计&#xff09; 二、考情分析 24上软考…

Java18新特性

Java 18是Java编程语言的最新版本&#xff0c;其中引入了许多新的特性和改进。以下是Java 18的一些主要特性&#xff1a; 本地模式推断 Java 18引入了本地模式推断&#xff0c;这意味着在局部变量声明中可以使用关键字var来推断变量的类型。这样可以减少冗余代码&#xff0c;并…

SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测

SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测 目录 SCI一区 | Matlab实现PSO-TCN-LSTM-Attention粒子群算法优化时间卷积长短期记忆神经网络融合注意力机制多变量时间序列预测预测效果基本介绍程序设…

Mac在docker可视化界面上安装主流数据库

前言 篇幅有点长&#xff0c;大家可以打开目录快速跳转到想要的数据库即可&#xff01; 虽然说用命令行会显得我们更加专业一些&#xff0c;但对于我英语水平不怎么好的人来说&#xff0c;毕竟命令多又长&#xff0c;还不好记。我个人是喜欢复杂问题简单化&#xff0c;踩了很多…

从了解到掌握 Spark 计算框架(一)Spark 简介与基础概念

文章目录 什么是 Spark&#xff1f;核心特点 Spark 对比 MapReduceSpark 编程模型RDDDataFrameDataset Spark 运行模式Spark 生态 什么是 Spark&#xff1f; Spark 是一个基于内存的分布式计算框架&#xff0c;最初由加州大学伯克利分校的 AMPLab 开发&#xff0c;后来捐赠给了…

Python 语法好乱:深度解析与应对策略

Python 语法好乱&#xff1a;深度解析与应对策略 Python&#xff0c;作为一门简洁明了的编程语言&#xff0c;广受编程初学者的喜爱。然而&#xff0c;随着学习的深入&#xff0c;许多学习者会发现Python的语法似乎并不像初看起来那么简单&#xff0c;甚至有时会感到“好乱”。…