博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【PAT】3-2 List Leaves【树、队列、遍历】
阅读量:6171 次
发布时间:2019-06-21

本文共 1602 字,大约阅读时间需要 5 分钟。

题目:

题意:给出树的一些结点,每个结点的两个值分别表示左儿子和右儿子,所以根节点肯定不会出现在上面的数据中,因为根节点不是其它任何节点的儿子。最后的要求是按照层序遍历的方式输出叶子结点。

思路:先建树,建树的同时寻找根结点,具体办法是用一个标记数组,遍历结点的时候同时把结点标记成ture,最后没有被标记到的结点就是根结点了。建完树之后层序遍历输出叶子结点就行了。

代码里一些需要注意的地方,构造树的时候,我们把用来构造结点的结构体当成C++的类,然后用构造函数进行赋值(赋值一个与题意里面的结点相悖的特殊值),这样遍历之后,如果结点仍然保持那个特殊值不变的话说明它没有左右儿子就是叶子结点了,打印即可。

AC代码:

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;#define read() freopen("data.in", "r", stdin)#define write() freopen("data.out", "w", stdout)#define clr( a , x ) memset ( a , x , sizeof a ) #define cpy( a , x ) memcpy ( a , x , sizeof a ) #define _max(a,b) ((a>b)?(a):(b))#define _min(a,b) ((a
q;int flag = 0;void Traversal(int a){ q.push(a); while(!q.empty()) { int j = q.front(); q.pop(); if (node[j].leftchild == -233 && node[j].rightchild == -233) { if (flag == 0) { printf("%d",j); flag = 1; }else { printf(" %d",j); } } if (node[j].leftchild != -233) { q.push(node[j].leftchild); } if (node[j].rightchild != -233) { q.push(node[j].rightchild); } } printf("\n");}int main(){ //read(); clr(root,false); char left,right; int n; cin>>n; getchar(); for (int i = 0; i < n; ++i) { scanf("%c %c",&left,&right); getchar(); if (isdigit(left)) { node[i].leftchild = left - '0'; root[node[i].leftchild] = true; } if (isdigit(right)) { node[i].rightchild = right - '0'; root[node[i].rightchild] = true; } } for (int i = 0; i < n; ++i) { if (root[i] == false) { Traversal(i); break; } } return 0;}

  

转载于:https://www.cnblogs.com/acmsummer/p/4364406.html

你可能感兴趣的文章
判断字符串是否为数字的函数
查看>>
[emuch.net]MatrixComputations(7-12)
查看>>
linux 命令 — 文件相关
查看>>
自己空闲的时候封装一下
查看>>
Datagard產生gap
查看>>
本机web开发环境的搭建--nginx篇
查看>>
rcnn 理解笔记
查看>>
问答项目---登陆验证码点击切换及异步验证验证码
查看>>
plist文件中iphone和ipad的应用图片设置
查看>>
搜集的一些资源网站链接
查看>>
struts2中类型转换器的使用
查看>>
11G Oracle RAC添加新表空间时数据文件误放置到本地文件系统的修正
查看>>
从91移动应用发展趋势报告看国内应用现状
查看>>
【ORACLE技术嘉年华PPT】MySQL压力测试经验
查看>>
Linux下汇编调试器GDB的使用
查看>>
css溢出机制探究
查看>>
vue中如何实现后台管理系统的权限控制
查看>>
关于angularjs过滤器的理解
查看>>
vue 使用html2canvas将DOM转化为图片
查看>>
angular编辑-初始化变量失败
查看>>