这种题目没有用我们常规的离散型的结点去构造树,而是采用结构体数组形式表达。

题目

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 NN (\le 10≤10) which is the total number of nodes in the tree – and hence the nodes are numbered from 0 to N-1N−1. Then NN 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

解释

也就是说,首先输入一个数字表示结点数N,结点编号从0-N-1,下面的N行顺序输入0-N-1号结点的左右孩子的编号。如果没有的话,就用’-‘表示。

思路

只需要理清楚用什么样的结构体存储,如何构建树,再考虑如何遍历。

因为采用的是结构体数组存储,只要把题中的关系输入进去,逻辑上一棵树就建好了。

题目要求的输出是层序遍历,因此假设结点之间的树关系已经构造好,那么借助一个队列来实现层序遍历,在输出的时候加以判断是不是叶子结点即可。

代码

#include <iostream>
#include <queue>
#include <vector>
using namespace std;typedef struct Node
{int index;int left;int right;
} Node;int generateTree(vector<Node> &nodes,int n) //返回根节点的index
{vector<int> checked(n,0);int root;if(n < 1){root = -1;}for(int i = 0; i < n; i++){Node node;node.index = i;char cl,cr;cin >> cl >> cr;if(cl != '-') // 有左孩子,那么左边结点就不会是根{node.left = cl - '0';checked[node.left] = 1;}else{node.left = -1;}if(cr != '-') // 有右孩子{node.right = cr - '0';checked[node.right]  = 1; // 右孩子不会是根}else{node.right = -1;}nodes.push_back(node);}for(int i = 0; i < n; i++) // 遍历,找到根结点{if(checked[i] == 0){root = i;}}return root;
}void levelTraversePrint(vector<Node> &nodes, int root)
{if(root == -1){return;}queue<Node> que;que.push(nodes[root]);int count  = 0; // 用于辅助判断是不是最后一个结点while(que.size()){Node node = que.front();count++;// 加一个是不是叶子的判断if(node.left == -1 && node.right == -1){if(count == nodes.size()){cout << node.index;}else{cout << node.index << ' ';}}que.pop(); // 弹出队首if(node.left != -1){que.push(nodes[node.left]);}if(node.right != -1){que.push(nodes[node.right]);}}
}int main()
{int n;cin >> n;vector<Node> nodes;int root =  generateTree(nodes,n);levelTraversePrint(nodes,root);cout << endl;
}

以上。

PTA--03-树2 List Leaves相关推荐

  1. PTA 03-树1 树的同构 (25分)

    题目地址 https://pta.patest.cn/pta/test/15/exam/4/question/711 5-3 树的同构   (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右 ...

  2. 算法 树2 List Leaves

    全部每周作业和视频思考题答案和解析 见 浙江大学 数据结构 思考题+每周练习答案汇总 题目:Given a tree, you are supposed to list all the leaves ...

  3. PTA目录树(使用字典树)

    目录树 题目 答案 总结 题目 答案 #include<iostream> #include<algorithm>//使用sort函数 #include<cstring& ...

  4. 广度优先遍历算法-03树的右侧问题

    树的右侧 简介 一个有点变形的二叉树的层序遍历. 问题描述 现在有一个果树,该树果子节点符合二叉树的分布,小王按照规定只能摘到从树的右侧看过去看到的第一个节点,求出节点序列. 问题分析 举例如下 假定 ...

  5. PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集...

    L2-006 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的个 ...

  6. pta 03-树1 树的同构 SDUT 3340 数据结构实验之二叉树一:树的同构

    03-树1 树的同构 (25分) 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为我们把其中一棵 ...

  7. 深度解析(十五)哈夫曼树

    哈夫曼树(一)之 C语言详解 本章介绍哈夫曼树.和以往一样,本文会先对哈夫曼树的理论知识进行简单介绍,然后给出C语言的实现.后续再分别给出C++和Java版本的实现:实现的语言虽不同,但是原理如出一辙 ...

  8. 数据结构JAVA实现——树

    数据结构JAVA实现--树 数据结构java实现--树的双亲表示法 数据结构Java实现--树|N叉树之孩子双亲表示法--顺序存储结构+链表 无序二叉树的实现 前序线索二叉树,中序线索二叉树 后续线索 ...

  9. pta习题:给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列。

    5-6 树的遍历 分数 20 全屏浏览题目 切换布局 作者 陈越 单位 浙江大学 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一 ...

  10. 数据结构——哈夫曼(Huffman)树+哈夫曼编码

    哈夫曼编码(Huffman Coding),又称霍夫曼编码,是一种编码方式,哈夫曼编码是可变字长编码(VLC)的一种.Huffman于1952年提出一种编码方法,该方法完全依据字符出现概率来构造异字头 ...

最新文章

  1. 二进制搜索树_二进制搜索树数据结构举例说明
  2. 2021年2月反思与总结
  3. MVC+Ninject+三层架构+代码生成 -- 总结(一、數據庫)
  4. Java与C#比较,哪个语言更是适合你?
  5. Css学习总结(3)——CSS布局解决方案 - 水平、垂直居中、多列布局、全屏布局
  6. 两台笔记本的操作系统都为xp的共享上网教程
  7. “数学不好,干啥都不行!”高级开发:方向不对,努力也白费!
  8. 深度强化学习调度研究的心路历程
  9. 梦笔记2022-02-28
  10. 欧几里得算法和扩展欧几里得算法
  11. 2021深圳杯东三省建模
  12. R语言绘制差异火山图示例
  13. 苹果笔记本硬盘怎么解锁_笔记本如何加装内存、硬盘,怎么增大C盘容量
  14. Edge Intelligence: On-Demand Deep Learning Model Co-Inference with Device-Edge Synergy
  15. Reinforced Neighborhood Selection Guided Multi-Relational Graph Neural Networks阅读笔记
  16. 产业安全专家谈丨数字经济高速发展,数据要素安全该如何保障?
  17. 玩客云刷入openwrt系统
  18. pytorch——卷积神经网络
  19. CentOS 8 清除 DNS 缓存的方法
  20. java拆分excel_apache poi拆分excel表格

热门文章

  1. 【RobotStudio学习笔记】(八)速度设置
  2. 数字图像处理怎么讲yiq空间变成rgb空间_【JTRP】屏幕空间深度边缘光 Screen Space Depth Rimlight...
  3. python标准输入输出语句_Python“门卫”之输入输出
  4. 你真的会php,你真的会PHP吗?
  5. asp.net 抓取html内容,c# – 如何从ASP.NET获取网页的HTML内容
  6. android 播放器 直播,通过android中的mediaplayer直播
  7. filezilla 设置服务器_服务器ftp软件,五款服务器ftp软件的使用方法
  8. 增城seo搜索引擎优化_搜索引擎seo优化主要从哪里入手?
  9. CNN训练可视化特征图(tensorflow2.x实现)
  10. java字符串字符排列组合_如何在Java中查找字符串的所有排列