励志用尽量少的代码做高效的表达。


根据输入构造二叉树,输出该二叉树的先序序列。二叉树共有N个节点,节点编号是1到N。约定1号节点是根节点。

输入格式:

第一行输入整数N。 接下来有N行,依次给出1到N节点的左孩子和右孩子。对于这N行中的每一行,有两个整数。第i(i=1, 2, …, N)行中,第一个整数指出左孩子的编号,第二个整数指出右孩子的编号。如果整数值为0,表示没有左孩子或右孩子。

输出格式:

输出一行,内容是二叉树的先序序列。节点编号之间用空格隔开,行末有1个空格。

输入样例:

6
2 5
3 4
0 0
0 0
0 6
0 0

输出样例:

1 2 3 4 5 6


思路分析:

本题的核心思路是:结构体数组模拟指针建树。
最开始尝试用指针构建二叉树解题,但做得不舒服,解不出来。仔细思考了一下,有两点原因。
(一)、指针建树的优点在于:在不知道节点数目的情况下, 我们仍然可以通过“动态扩充”建树, 但本题已经给了结点数,及每个左右子树,这种情况下如果再用指针建树,就相当于给我们一个条件我们没用

(二)、题中说每行对应每个节点的操作,也就是说:并不是乱序给我们的,我们可以通过循环遍历的方式很轻松的给结构体数组赋值。
考虑到这两点,我将其改进为结构体数组建树,不过结构体中的左右“子树”为int型。同样可以采用递归构造。很快就AC了。

代码:(不算注释为18行)

#include<iostream>
using namespace std;
struct Node {int l, r;
};
//先序遍历
void Fir(Node nodes[], int root) {if(root == 0) return;                   //递归结束的标志cout << root << " ";                 //先序遍历的三行核心代码,Fir(nodes, nodes[root].l);             Fir(nodes, nodes[root].r);
}
int main() {int n; cin >> n;Node nodes[n+1];for(int i = 1; i <= n; i++) cin >> nodes[i].l >> nodes[i].r;  //输入某节点的左右子树值Fir(nodes, 1);                         //约定1号节点是根节点 return 0;
}

收获:

1、结构体数组模拟指针建树。


择苦而安,择做而乐,虚拟现实终究比不上真实精彩之万一。

18行代码AC——PTA 二叉树的遍历 (10分)——解题报告相关推荐

  1. 10行代码AC——7-2 说反话-加强版 (20 分)——解题报告

    励志用尽量少的代码做高效的表达. 题目描述 给定一句英语,要求你编写程序,将句中所有单词的顺序颠倒输出. 输入格式: 测试输入包含一个测试用例,在一行内给出总长度不超过500 000的字符串.字符串由 ...

  2. 22行代码AC——例题7-1除法(Division UVa 725)——解题报告

    励志用尽量少的代码做高效的表达 题目(提交)链接→UVa-725 题目大意: 0-9不重复的组成两个5位数,如果数A/数B=n,则为可行解. 思路分析: 本题实质是通过巧妙分析的暴力求解法. 下等解法 ...

  3. 43行代码AC——例题6-8 树(Tree,UVa 548)——解题报告

    励志用尽量少的代码做高效的表达. You are to determine the value of the leaf node in a given binary tree that is the ...

  4. 21行代码AC——习题3-7 DNA序列(UVa-1368)_解题报告

    励志用尽量少的代码做高效表达. 题目(提交)链接→UVa-1368 思路: DNA序列:按列遍历,记录每一列出现次数最多(若同样多,则字典序最小)的字母,录入s串累加. 距离:重新遍历,录入出现次数比 ...

  5. 19行代码AC——例题 6-2 铁轨(Rails, UVa 514)——解题报告

    励志用尽量少的代码做高效的表达. 提交(题目)链接→UVa-514 此题的本质是:给出"入栈顺序",判断给定序列是否可以出栈. 有点像这种题: 因此思路也类似: 思路: 数组存储列 ...

  6. 26行代码AC——习题3-2 分子量 (UVa1586,Molar Mass)——解题报告

    大意: 给出分子式,式中只包含以下四种元素.求分子量. C:12.01 H: 1.008 O: 16.00 N: 14.01 Sample Input 4 C C6H5OH NH2CH2COOH C1 ...

  7. 9行代码AC——L1-022 奇偶分家(10 分)(~解题报告~)

    立志用更少的代码做更高效的表达 给定N个正整数,请统计奇数和偶数各有多少个? 输入格式: 输入第一行给出一个正整N(≤1000):第2行给出N个非负整数,以空格分隔. 输出格式: 在一行中先后输出奇数 ...

  8. 10行代码AC——L1-018 大笨钟 (10分)(~解题报告~)

    立志用更少的代码做更优化的表达 微博上有个自称"大笨钟V"的家伙,每天敲钟催促码农们爱惜身体早点睡觉.不过由于笨钟自己作息也不是很规律,所以敲钟并不定时.一般敲钟的点数是根据敲钟时 ...

  9. 19行代码AC——习题3-4 周期串(UVa-455)_解题报告

    励志用尽量少的代码做高效表达 题目(提交)链接-->UVa-455 题意: 输入一个长度不超过80的字符串,输出其最小周期. 思路: 本题的最佳思路是取余构造循环串求最小周期 按照正常求周期的方 ...

最新文章

  1. hive创建mysql表,hiveMysql创建、修改、删除字段/表
  2. WF单元测试系列3:测试Activity的行为
  3. Mule ESB-3.Build a webservice proxy
  4. RBAC模型:设计思路
  5. [html] 写html代码时,怎样才加速写代码的速度呢?你有什么方法?
  6. 【转】最为详尽的WPF类继承关系*!
  7. java 静态变量的使用_java的static静态变量是不是不安全的?应该如何正确的使用他呢...
  8. 【技术】一份完全解读:是什么使神经网络变成图神经网络?
  9. iOS绘图系列四:绘制文字和图像CGContextDrawImage,drawInRect:,drawAtPoint:, UIGraphicsBeginImageContext...
  10. POJ 3667 hotel(shǎ崽大神的模板|区间合并)
  11. matlab 万年历,转 计算万年历的Matlab程序
  12. 开发工具之 Snipaste(超级截图工具)
  13. 【时间序列】多变量时间序列异常检测数据集整理及标准化处理代码合集
  14. 每日一词20190301——比例尺和地图比例尺
  15. 2万字软件测试面试题干货带答案,反手我就一个收藏
  16. Android App数据加密
  17. macbook A1181 小白 换键盘记
  18. EJB框架 详细介绍和注解的使用
  19. Word中公式编辑器mathtype中符号显示异常
  20. linux运维-dovecot+postfix和空壳邮件

热门文章

  1. Java虚拟机类加载机制——案例分析
  2. Python中的判断语句及循环
  3. 一文看懂WebTransport
  4. Google调查了人们过去24小时的观看记录,发现了这些......
  5. 音视频技术开发周刊 76期
  6. librtmp协议分析---RTMP_SendPacket函数
  7. NGINX 进程通信机制
  8. Storm 1.1.0 集群安装
  9. redis 流 stream的使用总结 - 如何遍历
  10. Caused by: java.lang.IllegalArgumentException: No enum constant org.apache.ibatis.type.JdbcType.INT