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 ...
随机推荐
- 分享几个实用的jquery工具函数
1.$.browser对象属性 属性列表 说明 webkit webkit相关浏览器则返回true,否则返回false,如google,傲游. mozilla mozilla相关浏览器则返回tru ...
- Django auth 登陆后页面跳转至/account/profile,修改跳转至其他页面
这几天在学习django,django功能很强大,自带的auth,基本可以满足用户注册登陆登出,简单的用户注册登陆系统使用django auth足矣.当然也不是拿来就能用的,需要自己写登陆页面的模板, ...
- Network Saboteur(搜索)
Network Saboteur POJ2531 Time Limit: 2000MS Memory Limit: 65536K Total Submissions: 10351 Accept ...
- javascript跨域获取json数据
项目在开发过程中,用到了天气预报的功能,所以需要调用天气预报的api,一开始以为直接用ajax调用url就可以获取天气数据,结果涉及到了跨域的问题,这里做一个记录. 说到跨域,就得知道同源策略. 同源 ...
- Qt带来的是更加低廉的开发成本和学习成本,对于很多小公司而言,这种优势足以让他们获得更大的利润空间 good
不能单纯从技术上来看待这个问题,Qt本来是小众的开发平台,个人认为,它的出现只是解决特性场景的特定问题,Qt带来的是更加低廉的开发成本和学习成本,对于很多小公司而言,这种优势足以让他们获得更大的利润空 ...
- Qt中事件处理的方法(三种处理方法,四种覆盖event函数,notify函数,event过滤,事件处理器。然后继续传递给父窗口。可观察QWidget::event的源码,它是虚拟保护函数,可改写)
一.Qt中事件处理的方式 1.事件处理模式一 首先是事件源产生事件,最后是事件处理器对这些事件进行处理.然而也许大家会问, Qt中有这么多类的事件,我们怎么样比较简便的处理每个事件呢?设想,如果是 ...
- C# 集合详解 (适合新手)
System.Collections 命名空间包含接口和类,这些接口和类定义各种对象(如列表.队列.位数组.哈希表和字典)的集合.System.Collections.Generic 命名空间包含定义 ...
- 一次使用Eclipse Memory Analyzer分析Tomcat内存溢出
转:http://tivan.iteye.com/blog/1487855 前言 在平时开发.测试过程中.甚至是生产环境中,有时会遇到OutOfMemoryError,Java堆溢出了,这表明程序有严 ...
- 让magento的validate验证hidden field
Object.extend(Validation, { isVisible : function(elm) { return true; }, insertAdvice : function(elm, ...
- jdk7 中Collections.sort 异常
Collections.sort 异常 java.lang.IllegalArgumentException: Comparison method violates its general contr ...