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. c++基础五个题(三)

    一.一个对象访问普通函数和虚函数的时候,哪一个更快? 访问普通函数更快,因为普通成员函数在编译阶段已经被确定,因此在访问时直接调用对应地址的函数,而虚函数在调用时,需要首先在虚函数表中查找虚函数所在的 ...

  2. c链表结点的删除和添加

    #include<stdio.h> #include<stdlib.h> typedef char datetype;/*定义新的数据类型名*/ typedef struct ...

  3. 华为IC设计人员的薪酬(5年经验28万),以及麒麟是如何脱颖而出的~

    垂直整合助力麒麟腾飞 由于ARM技术路线大幅降低了技术门槛和研发的资金和时间成本,导致ARM阵营参与者众多,加上大家都是购买ARM的CPU核与GPU核,造成产品高度同质化,市场竞争异常激烈——在价格上 ...

  4. MFC radio button 绑定变量用法

    我们在对话框中拖动一个radio button控件,然后点击类向导,结果却发现在Member Variables里看不到Radio控件的ID.这是为什么? 2.1 三个Radio Button,ID分 ...

  5. 几道C语言的题目!

    注:编译环境 VC2010,系统WIN7 64位,其他编译环境和系统未测试   1-1. 编程,输入n,输出如下例(n=5)所示的图形: ***** ***** ***** ***** ***** # ...

  6. 绘图工具graphviz学习使用

    画图工具: http://www.tuicool.com/articles/r2iAfa http://www.tuicool.com/articles/RjQfey 绘图工具graphviz学习使用 ...

  7. Linux Ubuntu download

    下载地址:http://www.ubuntu.com/download/ Ubuntu桌面用户版 符合用户个性的版本

  8. 关于set和map的用法

    1.set 定义:每个元素最多只出现一次,并且默认的是从小到大排序. set 遍历: 题目http://www.cnblogs.com/ZP-Better/p/4700218.html for(set ...

  9. D-Separation(D分离)

    是属于 Bayesian network 中的概念

  10. Python 字符串相关操作

    # 1 * 重复输出字符串 print('hello'*2) # 2 [] ,[:] 通过索引获取字符串中字符,这里和列表的切片操作是相同的,具体内容见列表 print('helloworld'[2: ...