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)的更多相关文章

  1. 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 ...

  2. L2-006 树的遍历 (25 分) (根据后序遍历与中序遍历建二叉树)

    题目链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 L2-006 树的遍历 (25 分 ...

  3. pat03-树2. List Leaves (25)

    03-树2. List Leaves (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue Given a t ...

  4. 03-树1 树的同构(25 point(s)) 【Tree】

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

  5. 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 ...

  6. 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 ...

  7. L2-006 树的遍历 (25 分)

    链接:https://pintia.cn/problem-sets/994805046380707840/problems/994805069361299456 题目: 给定一棵二叉树的后序遍历和中序 ...

  8. 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 ...

  9. 浙大数据结构课后习题 练习三 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 ...

随机推荐

  1. Java注释模板设置详解

    设置注释模板的入口: Window->Preference->Java->Code Style->Code Template 然后展开Comments节点就是所有需设置注释的元 ...

  2. Bing必应(Yahoo雅虎)搜索引擎登录网站 - Blog透视镜

    Bing必应是微软的搜索引擎,原本是置放在MSN网站上的,微软重新开发并改为新的名子,只要连到官网,登录网站后,过了不久,搜索引擎就会用爬虫,来检索你的网站,等过了一阵子之后,自然就可以找到你的文章. ...

  3. SQL Server 索引的自动维护 <第十三篇>

    在有大量事务的数据库中,表和索引随着时间的推移而碎片化.因此,为了增进性能,应该定期检查表和索引的碎片,并对具有大量碎片的进行整理. 1.确定当前数据库中所有需要分析碎片的表. 2.确定所有表和索引的 ...

  4. C# Assembly类_反射

    System.Reflection.Assembly类是一个比较常用到的类,在反射中就经常用到. 由于这个类实在有太多的字段.属性与方法.实在不想将一个个属性方法从MSDN复制出来然后逐个属性.方法敲 ...

  5. fragment点击跳转到外部Activity后,怎么通过返回按钮返回

    楼主的情况应该是比较简单的吧,跟三楼说的一样,只要在D跳到下一个Activity的时候,D所在的Activity不要调用finish(),然后在下一个Activity关闭的时候直接调用finish() ...

  6. linux命令行常用快捷键

    方向          <-前               后 ->删除ctrl + d      删除光标所在位置上的字符相当于VIM里x或者dlctrl + h      删除光标所在 ...

  7. 导入时如何定制spring-boot依赖项的版本

    spring-boot通过maven的依赖管理为我们写好了很多依赖项及其版本,我们可拿来使用.spring-boot文档介绍了两种使用方法,一是继承,二是导入. 通过<parent>继承: ...

  8. 剑指offer-面试题23.从上往下打印二叉树

    题目:从上往下打印出二叉树的每个结点,同一层的结点按照从左到右的顺序打印.例如输入图4.5中 的二叉树,则依次打印出8.6.10.5.7.9.11二叉树结点的定义如下: struct BinaryTr ...

  9. PSPInstance Object | Web Python

    PSPInstance Object | Web Python The PSPInstance object is available to all PSP pages through the psp ...

  10. linux 下apache安装、启动和配置

    linux 下 apache安装 1:系统安装,这里就不说了,网上有很多,也很简单.顺便说下,我用的是redhat 9: 2:在图形界面下下载apache 安装包,我下的是 httpd-2.2.9.t ...