题目大意:

给定一棵树的结点个数n,以及它的前序遍历和后序遍历,输出它的中序遍历;

如果中序遍历不唯一就输出No,且输出其中一个中序即可,如果中序遍历唯一就输出Yes,并输出它的中序

思路:(转载

先序+后序 无法判断二叉树的唯一性

  • 先序第一个节点是根节点,紧接着第二个节点是根节点的左节点还是右节点?
  • 在后序中查找 先序中的第二个节点,
  1. 如果后序中的该位置 到 最后(也就是后序中根节点位置) 还有其他数的话,可以判断,先序中第二个节点肯定左节点(反证法。。。)
  2. 当中间没有数的时候,就不确定了

例如:

前序序列:
后序序列: 为 根, 接着,2在后序中,与1隔着两个数,所以2一定是1的左节点; ,4成为1的右子树节点
#include<bits/stdc++.h>
using namespace std;
int n;
bool isUnique = true;
vector<int> preOrder, in, postOrder; struct Node {
int val;
Node* lchild, *rchild;
Node(int _val = -){
val = _val;
lchild = NULL;
rchild = NULL;
} }; Node* Create(int preL, int preR, int postL, int postR)
{
Node* root = new Node(preOrder[preL]);
if (preL == preR) return root;
int k;
for (k = postL; k < postR; k++){ // 后序找 pre[preL + 1]
if (postOrder[k] == preOrder[preL + ]) break;
}
// 在后序中查找 先序中的第二个节点
// 如果后序中的该位置 到 最后(也就是后序中根节点位置) 还有其他数的话,
// 可以判断,先序中第二个节点肯定左节点(反证法。。。)
if (postR - k - > ){
int numLeft = k - postL + ;
root->lchild = Create(preL + , preL + numLeft, postL, k);
root->rchild = Create(preL + + numLeft, preR, k + , postR - );
}
else {
isUnique = false;
//假定第二个节点是根节点的右节点
root->rchild = Create(preL + , preR, postL, postR - );
}
return root;
} void inOrder(Node* root){
if (root != NULL){
inOrder(root->lchild);
in.push_back(root->val);
inOrder(root->rchild);
}
} int main()
{
scanf("%d", &n);
preOrder.resize(n);
postOrder.resize(n);
for (int i = ; i < n; i++) scanf("%d", &preOrder[i]);
for (int i = ; i < n; i++) scanf("%d", &postOrder[i]);
Node* root = Create(, n - , , n - );
inOrder(root);
printf("%s\n%d", isUnique == true ? "Yes" : "No", in[]);
for (int i = ; i<n; i++) printf(" %d", in[i]);
printf("\n");
return ;
}

1119.(重、错)Pre- and Post-order Traversals的更多相关文章

  1. Construct a tree from Inorder and Level order traversals

    Given inorder and level-order traversals of a Binary Tree, construct the Binary Tree. Following is a ...

  2. 解决MySQL报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'informat

    解决MySQL报错:1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'informat ...

  3. git commit -m "XX"报错 pre -commit hook failed (add --no-verify to bypass)问题

    在同步本地文件到线上仓库的时候 报错 pre -commit hook failed (add --no-verify to bypass) 当你在终端输入git commit -m "xx ...

  4. 错题重错之枪战Maf

    题目描述 有 n 个人,用1∼n 进行编号,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人 ...

  5. MySQL ORDER BY主键id加LIMIT限制走错索引

    背景及现象 report_product_sales_data表数据量2800万: 经测试,在当前数据量情况下,order by主键id,limit最大到49的时候可以用到索引report_produ ...

  6. Win7系统64位环境下使用Apache——安装Apache2.4时报错“Invalid command Order”问题的解决

    之前在文章Win7系统64位环境下使用Apache--Apache2.4整合Tomcat与mod_jk提到了安装Apache2.4时有可能报错: Invalid command 'Order', pe ...

  7. SQL注入之Sqli-labs系列第五关和第六关(基于GET型的报错注入)

    废话不在多说  let's go! 开始挑战第五关(Double Query- Single Quotes- String) 和第六关(Double Query- Double Quotes- Str ...

  8. SQL Server中ORDER BY后面可以是表达式和子查询

    假如SQL Server数据库中现在有Book表如下 CREATE TABLE [dbo].[Book]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [CreateTi ...

  9. SQLi-LABS Page-3 (order by injections) Less-46-Less-53

    关于order by 注入原理讲解 注入原理 1. 测试 ?sort=1 desc--+?sort=1 asc--+ 显示结果不同,说明可以注入 desc是 descend 降序意思 asc 是 as ...

  10. HDU 1160 FatMouse's Speed

    半个下午,总算A过去了 毕竟水题 好歹是自己独立思考,debug,然后2A过的 我为人人的dp算法 题意: 为了支持你的观点,你需要从给的数据中找出尽量多的数据,说明老鼠越重速度越慢这一论点 本着“指 ...

随机推荐

  1. 最长公共子序列与最长公共字串 (dp)转载http://blog.csdn.net/u012102306/article/details/53184446

    1. 问题描述 子串应该比较好理解,至于什么是子序列,这里给出一个例子:有两个母串 cnblogs belong 比如序列bo, bg, lg在母串cnblogs与belong中都出现过并且出现顺序与 ...

  2. npm常规命令行集合

    最近在摸索vue-cli脚手架的安装,中间用到了一些node的npm命令行,进行了一些整理,并且这个会一直搜集整理更新! 1,常规文件操作命令 cd..                   返回当前文 ...

  3. ZOJ 1005:Jugs(思维)

    Jugs Time Limit: 2 Seconds      Memory Limit: 65536 KB      Special Judge In the movie "Die Har ...

  4. 在学习linux基础入门时的一些问题总结(1)

    本周在实验楼完成了<linux基础入门>的21个实验,虽然之前已经学习过linux的相关课程,对linux下的命令也有一些了解和实践,但完成这21个实验以及35个练习题仍然遇到了许多的问题 ...

  5. hibernate--DetachedCriteria(离线条件查询)

    一.叙述 离线条件查询的好处,可以在非dao层封装查询参数,封装完成后,将对象传递到dao层,关联到session后,再去查询数据,这样做dao层可以极大的简化代码.下面通过一个小案例,一起来感受一下 ...

  6. 尚硅谷【SpringBoot】web(源码讲解太多不建议阅读)

    四.Web开发 1.简介 使用SpringBoot: 1).创建SpringBoot应用,选中我们需要的模块: 2).SpringBoot已经默认将这些场景配置好了,只需要在配置文件中指定少量配置就可 ...

  7. linux日志管理

    //有关当前登录用户的信息记录在文件utmp中 //登录进入和退出纪录在文件wtmp中 [root@bogon python]# who //who命令查询utmp文件并报告当前登录的每个用户 /va ...

  8. execve函数的介绍与使用

    #include<stdio.h> #include<unistd.h> int main() { char *filename[]={"./BP",NUL ...

  9. nginx屏蔽某一ip的访问

    假设我们想禁止访问nginx次数最多的ip访问我们的网站 我们可以先查出那个ip访问次数最多 awk '{print $1}' nginx.access.log |sort |uniq -c|sort ...

  10. Android.bp学习笔记

    1.Android.bp简介 Android 7.0之后希望用Android.bp替换Android.mk,bp简单的配置更方便Ninja 文件的产生,而Blueprint和Soong 就此产生.An ...