博客
关于我
【树的应用】——列出叶结点 (25分)(附测试点)
阅读量:99 次
发布时间:2019-02-26

本文共 1546 字,大约阅读时间需要 5 分钟。

对于给定的二叉树,本题要求你按从上到下、从左到右的顺序输出其所有叶节点。

输入格式:

首先第一行给出一个正整数 N(≤10),为树中结点总数。树中的结点从 0 到 N−1 编号。随后 N 行,每行给出一个对应结点左右孩子的编号。如果某个孩子不存在,则在对应位置给出 “-”。编号间以 1 个空格分隔。

输出格式:

在一行中按规定顺序输出叶节点的编号。编号间以 1 个空格分隔,行首尾不得有多余空格。

输入样例:

81  --  -0  -2  7-  --  -5  -4  6

输出样例:

4 1 5
这道题我做的可谓是错误百出,在编译器上不知道编译了多少次。。刚开始用的指针、结构体,就是真正构造一棵二叉树那样的过程,到后边发现左孩子右孩啥的不好搞了,我觉得应该也可以做,但我懒,没试,最后用的三个整型变量封装的结构体作为树的结点。之前做过一些题,这种数组等形式的表示链表、指针结构,空可以设为-1(前提保证没有结点的数据或者键为-1,否则错误,到时可以选择换一个不会影响的数据或者采用其他方式),再就是只有指针才是->访问,其他是.运算符,我。。服了我自己了
关键是找出根结点,通过观察你会发现,唯一没有直接出现的数就是根结点,样例中出现了0,1,2,4,5,6,7,没有3,所以3就是根结点,然后再从3开始遍历左子树和右子树,进行同样的判断入队等操作。从上到下,从左到右是很明显的层次遍历操作,层次遍历使用队列,注意输出。

样例给出最终二叉树结构如图(手写)

在这里插入图片描述

data域存储结点的键值,即0~N-1,由于输入也是输入的字符(因为有’-’,所以统一按字符输入),但最后转为结点时是整型,存储用int,输入字符后进行-'0’操作再转换即可。

在这里插入图片描述

#include 
#include
using namespace std;typedef struct{ int data; int left,right;}Node;Node node[10];bool flag[10] = { false};void order(Node no){ queue
qe; qe.push(no); int len = 0; while(!qe.empty()){ Node t = qe.front(); if(t.left==-1&&t.right==-1){ len++; if(len==1) cout << t.data; else cout << " " << t.data; } qe.pop(); if(t.left!=-1) qe.push(node[t.left]); if(t.right!=-1) qe.push(node[t.right]); }} int main(){ ios::sync_with_stdio(false); int n; char a,b; cin >> n; for(int i = 0;i
> a >> b; node[i].data = i; if(a!='-'){ node[i].left = a-'0'; flag[a-'0'] = true; }else{ node[i].left = -1; } if(b!='-'){ node[i].right = b-'0'; flag[b-'0'] = true; }else{ node[i].right = -1; } } int root; for(int i = 0;i

转载地址:http://jxaz.baihongyu.com/

你可能感兴趣的文章
navicat 添加外键1215错误
查看>>
navicat 系列软件一点击菜单栏就闪退
查看>>
navicat 自动关闭_干掉Navicat!MySQL官方客户端到底行不行?
查看>>
Navicat 设置时间默认值(当前最新时间)
查看>>
navicat 连接远程mysql
查看>>
navicat:2013-Lost connection to MySQL server at ‘reading initial communication packet解决方法
查看>>
Navicate for mysql 数据库设计-数据库分析
查看>>
Navicat下载和破解以及使用
查看>>
Navicat中怎样将SQLServer的表复制到MySql中
查看>>
navicat创建连接 2002-can‘t connect to server on localhost(10061)且mysql服务已启动问题
查看>>
Navicat可视化界面导入SQL文件生成数据库表
查看>>
Navicat向sqlserver中插入数据时提示:当 IDENTITY_INSERT 设置为 OFF 时,不能向表中的标识列插入显式值
查看>>
Navicat因导入的sql文件中时间数据类型有参数而报错的原因(例:datetime(3))
查看>>
Navicat如何连接MySQL
查看>>
navicat导入.sql文件出错2006- MySQLserver has gone away
查看>>
Navicat工具Oracle数据库复制 or 备用、恢复功能(评论都在谈论需要教)
查看>>
navicat怎么导出和导入数据表
查看>>
Navicat报错:1045-Access denied for user root@localhost(using passwordYES)
查看>>
Navicat通过存储过程批量插入mysql数据
查看>>
Navicat(数据库可视化操作软件)安装、配置、测试
查看>>