03-树1. 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
这是一个简单的二叉树,根据题目给出的结点创建一颗树,然后按层次遍历,把叶节点按顺序输出。
1 #include <iostream>
2 #include <cstdlib>
3 #include <set>
4 #include <queue>
5 #include <cstring>
6 #include <string>
7 using namespace std;
8
9 struct node //结点结构体
10 {
11 int leftchild; //左儿子
12 int rightchild; //右儿子
13 node () //初始化
14 {
15 leftchild=-1;
16 rightchild=-1;
17 }
18 };
19 node n[20];
20 bool r[20]; //记录是否是根结点
21 queue<int> q; //有队列遍历树
22 int t=0;
23
24 void traversal(int a) //根据根节点a遍历树并且把也结点输出
25 {
26 q.push(a);
27 while (!q.empty())
28 {
29
30 int j=q.front();
31 //cout <<"q.pop() "<<j<<endl;
32 q.pop();
33 if (n[j].leftchild==-1&&n[j].rightchild==-1)//没有左儿子和有儿子则为叶子
34 {
35 if (t==0)//第一个叶节点直接输出,以后每个结点前有一个空格
36 {
37 cout <<j;
38 t=1;
39 }
40 else
41 {
42 cout <<" "<<j;
43
44 }
45 }
46 if (n[j].leftchild!=-1)
47 {
48 q.push(n[j].leftchild); //左儿子存在,压入队列
49 }
50 if (n[j].rightchild!=-1)
51 {
52 q.push(n[j].rightchild);//左右子存在,压入队列
53 }
54 }
55 }
56 int main()
57 {
58 char a,b;
59 int m;
60 while (cin>>m)
61 {
62 memset(r,false,sizeof(r));
63 for (int i=0;i<m;i++)//根据输入数据构建树
64 {
65 cin>>a>>b;
66 if (a>='0'&&a<='9')
67 {
68 n[i].leftchild=a-48;
69 r[a-48]=true;
70 }
71 if (b>='0'&&b<='9')
72 {
73 n[i].rightchild=b-48;
74 r[b-48]=true;
75 }
76 }
77 for (int i=0;i<m;i++)
78 {
79 if (!r[i])
80 {
81 traversal(i);
82 //cout <<"i"<<i<<endl;
83 cout <<endl;
84 break;
85 }
86 }
87 }
88 return 0;
89 }
03-树1. List Leaves (25)的更多相关文章
- 03-树2. List Leaves (25) 二叉树的层序遍历
03-树2. List Leaves (25) 题目来源:http://www.patest.cn/contests/mooc-ds/03-%E6%A0%912 Given a tree, you a ...
- L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)
题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...
- pat03-树2. List Leaves (25)
03-树2. List Leaves (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given a t ...
- 03-树1 树的同构(25 point(s)) 【Tree】
03-树1 树的同构(25 point(s)) 给定两棵树T1和T2.如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是"同构"的.例如图1给出的两棵树就是同构的,因为 ...
- PTA 03-树2 List Leaves (25分)
题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/666 5-4 List Leaves (25分) Given a tree, you ...
- 7-4 List Leaves (25分) JAVA
Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ...
- L2-006 树的遍历 (25 分)
链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 题目: 给定一棵二叉树的后序遍历和中序 ...
- 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. I ...
- 浙大数据结构课后习题 练习三 7-4 List Leaves (25 分)
Given a tree, you are supposed to list all the leaves in the order of top down, and left to right. I ...
随机推荐
- Proud Merchants(POJ 3466 01背包+排序)
Proud Merchants Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others) ...
- 一次oracle大量数据删除经历
oracle有个数据表现在已经有2500万条数据了,软件用到这个表的数据时就变的特别慢,所以准备把一个月以前的数据全部清除. 我的步骤是(下边操作都是在plsql中运行的) 1.首先 将这个月的数据导 ...
- webService设置超时时间
在客户端配置文件中设置: <bindings> <basicHttpBinding> <binding name="UrlCrawler ...
- C++之------回调函数
一:What?(什么是回调函数) 回调函数图文讲解 谓回调,就是客户程序C调用服务程序S中的某个函数A,然后S又在某个时候反过来调用C中的某个函数B,对于C来说,这个B便叫做回调函数. 例如Win32 ...
- 添加事件监听兼容IE6-8
IE8一下浏览器不支持addEventListener,用attachEvent取而代之,但是在时间类型前面要加上’on‘,例如click时间在attachEvent中要写成onclick. var ...
- Java 学习 第四篇;面向对象(1)
1:关于继承为了保证父类的良好封装性,不会被子类随意改变,设计父类时通常隐藏父类的内部数据,把父类属性改为private如果父类中可以被重写,但不希望被其他类自由访问可用protected修饰;2:什 ...
- [ASP.NET] 图形验证码破解-以简单图形为例
原文 http://www.dotblogs.com.tw/joysdw12/archive/2013/06/08/captcha-cracked.aspx 前言 这次来讲个比较有趣的主题,就是该如何 ...
- Median of Two Sorted Arrays 解答
Question There are two sorted arrays nums1 and nums2 of size m and n respectively. Find the median o ...
- android-读取Assets图片资源保存到SD - 随心
public class ReadBitmap { public void readByte(Context c, String name, int indexInt) { byte[] b = nu ...
- 一个非常给力的播放器video-js
video-js采用的是html5播放器. 在不支持html5的浏览器会自动切换成flash. video-js的官网http://www.videojs.com/ 看看下载的demo就知道个大概了. ...