03-树2. List Leaves (25)

题目来源:http://www.patest.cn/contests/mooc-ds/03-%E6%A0%912

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

题目大意: 通过输入节点数以及每个节点的左儿子和右儿子,从上到下打印出叶节点。
题目关键:要理解输入的第几行就是代表该节点的值为几。例如样例输入中第0行的1 -代表值为0的节点左孩子的值为1,即指向第1行,右孩子为空(-1)
树模型如下:


代码如下:
 #include <cstdio>
#include <cctype> #define N 10 typedef struct Node
{
int data, left, right;
} TreeNode;
TreeNode node[N];
TreeNode Queue[N]; //数组实现队列 int first = -, last = -; void Push(TreeNode tn);
TreeNode Pop();
void printLeaves(int root, int n); int charToInt(char ch); int main()
{
int n;
bool isRoot[N];
int root; scanf("%d\n", &n);
for (int i = ; i < n; i++)
isRoot[i] = ;
for (int i = ; i < n; i++)
{
char cLeft, cRight;
scanf("%c %c", &cLeft, &cRight);
getchar(); //读取缓存区的回车符
node[i].left = charToInt(cLeft);
node[i].right = charToInt(cRight);
node[i].data = i;
//一个节点的左孩子和右孩子一定不是根节点
if (node[i].left != -)
isRoot[node[i].left] = ;
if (node[i].right != -)
isRoot[node[i].right] = ;
}
//找到根节点
for (int i = ; i < n; i++)
{
if (isRoot[i])
{
root = i;
break;
}
}
printLeaves(root, n); return ;
} void Push(TreeNode treeNode)
{
Queue[++last] = treeNode;
} TreeNode Pop()
{
return Queue[++first];
} //层序遍历树节点并打印出叶节点:队列实现
void printLeaves(int root, int n)
{
int leaves[N];
int k = ;
Push(node[root]);
for (int i = ; i < n; i++)
{
TreeNode tn = Pop();
//左孩子和右孩子都不存在时,将叶节点的值保存到数组中,便于格式化打印
if (tn.left == - && tn.right == -)
leaves[k++] = tn.data;
if (tn.left != -)
Push(node[tn.left]);
if (tn.right != -)
Push(node[tn.right]);
}
for (int i = ; i < k-; i++)
printf("%d ", leaves[i]);
printf("%d\n", leaves[k-]);
} int charToInt(char ch)
{
if (isdigit(ch))
return ch - '';
else
return -;
}

03-树2. List Leaves (25) 二叉树的层序遍历的更多相关文章

  1. 二叉树的层序遍历 BFS

    二叉树的层序遍历,或者说是宽度优先便利,是经常考察的内容. 问题一:层序遍历二叉树并输出,直接输出结果即可,输出格式为一行. #include <iostream> #include &l ...

  2. 五三想休息,今天还学习,图解二叉树的层序遍历BFS(广度优先)模板,附面试题题解

    壹 ❀ 引 我在从JS执行栈角度图解递归以及二叉树的前.中.后遍历的底层差异一文中,从一个最基本的数组遍历引出递归,在掌握递归的书写规则后,又从JS执行栈角度解释了二叉树三种深度优先(前序.中序后序) ...

  3. Leetcode 102. Binary Tree Level Order Traversal(二叉树的层序遍历)

    Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to right, ...

  4. 剑指offer 二叉树的层序遍历

    剑指offer 牛客网 二叉树的层序遍历 # -*- coding: utf-8 -*- """ Created on Tue Apr 9 09:33:16 2019 @ ...

  5. leetcode之二叉树的层序遍历

    1.题目描述 2.题目分析 二叉树的层序遍历主要算法思想是使用 队列这一数据结构实现,这个数据结构多应用在和 图相关的算法.例如图的广度优先遍历就可以使用队列的方法实现.本题的关键在于如何识别出一层已 ...

  6. LeetCode 102. 二叉树的层序遍历 | Python

    102. 二叉树的层序遍历 题目来源:https://leetcode-cn.com/problems/binary-tree-level-order-traversal 题目 给你一个二叉树,请你返 ...

  7. 刷题-力扣-107. 二叉树的层序遍历 II

    107. 二叉树的层序遍历 II 题目链接 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/binary-tree-level-order-tr ...

  8. leetcode题解:Tree Level Order Traversal II (二叉树的层序遍历 2)

    题目: Given a binary tree, return the bottom-up level order traversal of its nodes' values. (ie, from ...

  9. leetcode 题解:Binary Tree Level Order Traversal (二叉树的层序遍历)

    题目: Given a binary tree, return the level order traversal of its nodes' values. (ie, from left to ri ...

随机推荐

  1. http-equiv=mobile-agent说明

    Meta声明的格式:<meta http-equiv=”mobile-agent” content=”format=[wml|xhtml|html5]; url=url”> 比如: < ...

  2. k8s zookeeper、kafka部署

    安装zookeeper apiVersion: v1 kind: ConfigMap metadata: name: zookeeper-config namespace: kube-system a ...

  3. 【视频编解码·学习笔记】4. H.264的码流封装格式 & 提取NAL有效数据

    一.码流封装格式简单介绍: H.264的语法元素进行编码后,生成的输出数据都封装为NAL Unit进行传递,多个NAL Unit的数据组合在一起形成总的输出码流.对于不同的应用场景,NAL规定了一种通 ...

  4. python错误记录

    在主函数里调用其他函数时形参顺序要一致 错例如下:

  5. 美国警察iPhone数据线挡住歹徒子弹获救

    泡泡网手机频道11月1日 现在手机的功能越来越丰富,不仅可以接打电话.收发短信.玩游戏聊天,关键时刻还能救命.前天HTC手机再次忠心护主,让许多同学对HTC赞赏有加.而现在又有人捡了一条命,不过这次救 ...

  6. [redis] linux下哨兵篇(3)

    一.前言1.为何部署sentinel哨兵前文redis主从架构中,当主服务故障时,需要手动将从服务切换为主服务,sentinel服务就是将这个过程自动化.主要功能有:1)不时监控主从服务正常运行2)可 ...

  7. Asphalting Roads(翻译!)

    Description City X consists of n vertical and n horizontal infinite roads, forming n × n intersectio ...

  8. Learn Docker(一)—软件安装与常规操作

    一.安装Docker Windows平台 在Windows10 X64专业版上可以直接下载Docker原生应用进行安装,在控制面板的程序与功能里启用Hyper-v,之后就可以运行docker程序啦. ...

  9. DS01--抽象数据类型

    一.作业内容 二.数据结构.函数说明 1.头文件 common.h 2.数据结构 Rational.h 三.代码实现说明 1.构造有理数T 2.销毁有理数T 3.e返回有理数的分子或分母 4.用e改变 ...

  10. springmvc 路由

    工作中MVC是较常使用的web框架,作为研发人员,也习惯了以编写Controller作为项目开始,写好了Controller和对应的方法,加上@RequestMapping注解,我们也就认为一切已经准 ...