题目描述:

输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7,2,1,5,3,8,6},则重建二叉树并输出它的后序遍历序列。

输入:

输入可能包含多个测试样例,对于每个测试案例,

输入的第一行为一个整数n(1<=n<=1000):代表二叉树的节点个数。

输入的第二行包括n个整数(其中每个元素a的范围为(1<=a<=1000)):代表二叉树的前序遍历序列。

输入的第三行包括n个整数(其中每个元素a的范围为(1<=a<=1000)):代表二叉树的中序遍历序列。

输出:

对应每个测试案例,输出一行:

如果题目中所给的前序和中序遍历序列能构成一棵二叉树,则输出n个整数,代表二叉树的后序遍历序列,每个元素后面都有空格。

如果题目中所给的前序和中序遍历序列不能构成一棵二叉树,则输出”No”。

样例输入:
8
1 2 4 7 3 5 6 8
4 7 2 1 5 3 8 6
8
1 2 4 7 3 5 6 8
4 1 2 7 5 3 8 6
样例输出:
7 4 2 5 8 6 3 1
No 这道题和清华的机试题一样,但多了判断,我的判断开始少了一个条件,导致一直错误
 #include <cstdio>
#include <cstdlib>
#include <cstring>
#include <string> #define MAX 1002 int front[MAX];
int middle[MAX];
int back[MAX]; bool backOut(int start, int end, int fb, int num) {
int wei;
bool isOk = false;
if(start == end) {
if(front[fb] == middle[start]) {
back[num] = front[fb];
return true;
}
else {
return false;
}
}
for(int i = start; i <= end; i++) {
if(middle[i] == front[fb]) {
wei = i;
isOk = true;
break;
}
}
if(!isOk) {
return false;
}
back[num] = front[fb];
if(start != wei) {
isOk = isOk && backOut(start, wei-, fb+, num-end+wei-);
}
if(end != wei) {
isOk = isOk && backOut(wei+, end, fb+wei-start+, num-);
}
return isOk;
} int main(int argc, char const *argv[])
{
int n;
//freopen("input.txt","r",stdin);
while(scanf("%d",&n) != EOF) { for(int i = ; i < n; i++) {
scanf("%d",&front[i]);
}
for(int i = ; i < n; i++) {
scanf("%d",&middle[i]);
}
if(backOut(, n-, , n-)) {
for(int i = ; i < n; i++) {
printf("%d ", back[i]);
}
printf("\n");
}
else {
puts("No");
} }
return ;
}

最新文章

  1. Android 双击 Back 键退出程序
  2. (转)JavaScript二:JavaScript语言的基本语法要求
  3. iOS开发拓展篇—音频处理(音乐播放器6)
  4. ZOJ 1110 Dick and Jane
  5. MAC上安装Homebrew、Nginx、PHP、MySQL
  6. 搭建docker私有仓库 笔记
  7. 史上最全的java随机数/字符串生成算法(转)
  8. java调用wsdl xfire和cxf两种方式
  9. SSH整合缓存之-Memcached作为hibernate的二级缓存
  10. 花了一年时间开发出来的EZNest 自动套料软件
  11. Loadrunner错误 -27727: 下载资源时步骤下载超时 (120 seconds) 已过期
  12. Keras:基于Theano和TensorFlow的深度学习库
  13. python用类实现xrange
  14. PHP-不同Str 拼接方法性能对比 参考自https://www.cnblogs.com/xiaoerli520/p/9624309.html
  15. win10远程桌面连接提示身份验证错误,要求的函数不受支持的解决方案
  16. GIT 工作区和暂存区
  17. 校验字符串是否是JSON格式,将不规则展示的json格式的字符串进行规则展示(json格式化)
  18. GDAL------API
  19. sqoop导入导出对mysql再带数据库test能跑通用户自己建立的数据库则不行
  20. git —— 分支

热门文章

  1. ES-Mac OS环境搭建-ik中文分词器
  2. ES-Mac OS环境搭建-kibana
  3. 51nod 1212 无向图最小生成树(Kruskal模版题)
  4. 运行powershell 脚本 在此系统上禁止运行脚本
  5. Asp.net Mvc 表单验证(气泡提示)
  6. An internal error occurred during: &quot;Map/Reduce location status updater&quot;. java.lang.NullPointerException
  7. Spring MVC能响应HTTP请求的原因?
  8. Gym 100883J palprime(二分判断点在凸包里)
  9. 题解 P5082 【成绩】
  10. 在行列都排好序的矩阵中找数 【题目】 给定一个有N*M的整型矩阵matrix和一个整数K, matrix的每一行和每一 列都是排好序的。实现一个函数,判断K 是否在matrix中。 例如: 0 1 2 5 2 3 4 7 4 4 4 8 5 7 7 9 如果K为7,返回true;如果K为6,返 回false。 【要求】 时间复杂度为O(N+M),额外空间复杂度为O(1)。