1119.(重、错)Pre- and Post-order Traversals
题目大意:
给定一棵树的结点个数n,以及它的前序遍历和后序遍历,输出它的中序遍历;
如果中序遍历不唯一就输出No,且输出其中一个中序即可,如果中序遍历唯一就输出Yes,并输出它的中序
思路:(转载)
先序+后序 无法判断二叉树的唯一性
- 先序第一个节点是根节点,紧接着第二个节点是根节点的左节点还是右节点?
- 在后序中查找 先序中的第二个节点,
- 如果后序中的该位置 到 最后(也就是后序中根节点位置) 还有其他数的话,可以判断,先序中第二个节点肯定左节点(反证法。。。)
- 当中间没有数的时候,就不确定了
例如:
前序序列:
后序序列: 为 根, 接着,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的更多相关文章
- 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 ...
- 解决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 ...
- 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 ...
- 错题重错之枪战Maf
题目描述 有 n 个人,用1∼n 进行编号,每个人手里有一把手枪.一开始所有人都选定一个人瞄准(有可能瞄准自己).然后他们按某个顺序开枪,且任意时刻只有一个人开枪.因此,对于不同的开枪顺序,最后死的人 ...
- MySQL ORDER BY主键id加LIMIT限制走错索引
背景及现象 report_product_sales_data表数据量2800万: 经测试,在当前数据量情况下,order by主键id,limit最大到49的时候可以用到索引report_produ ...
- Win7系统64位环境下使用Apache——安装Apache2.4时报错“Invalid command Order”问题的解决
之前在文章Win7系统64位环境下使用Apache--Apache2.4整合Tomcat与mod_jk提到了安装Apache2.4时有可能报错: Invalid command 'Order', pe ...
- SQL注入之Sqli-labs系列第五关和第六关(基于GET型的报错注入)
废话不在多说 let's go! 开始挑战第五关(Double Query- Single Quotes- String) 和第六关(Double Query- Double Quotes- Str ...
- SQL Server中ORDER BY后面可以是表达式和子查询
假如SQL Server数据库中现在有Book表如下 CREATE TABLE [dbo].[Book]( ,) NOT NULL, ) NULL, ) NULL, ) NULL, [CreateTi ...
- SQLi-LABS Page-3 (order by injections) Less-46-Less-53
关于order by 注入原理讲解 注入原理 1. 测试 ?sort=1 desc--+?sort=1 asc--+ 显示结果不同,说明可以注入 desc是 descend 降序意思 asc 是 as ...
- HDU 1160 FatMouse's Speed
半个下午,总算A过去了 毕竟水题 好歹是自己独立思考,debug,然后2A过的 我为人人的dp算法 题意: 为了支持你的观点,你需要从给的数据中找出尽量多的数据,说明老鼠越重速度越慢这一论点 本着“指 ...
随机推荐
- scrapt中的数据提取,采用js2xml库
这个一个爬去美团的例子,应为数据都是在script中,小心封ip,尽量少运行. 先导入库几个库 import requests from bs4 import BeautifulSoup from l ...
- easyui的DataGrid的单元格添加ProgressBar进度条
网上的搜到的好多不能用,官方easy-ui使用进度条 <div id="p" class="easyui-progressbar" ></di ...
- 20155219 2016-2017-2 《Java程序设计》第3周学习总结
20155219 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 数组问题 -Scanner实例,猜数字. package src.week1; import ...
- spring管理
spring管理 SqlMapConfig.xml: <?xml version="1.0" encoding="UTF-8"?> <bean ...
- IDLE的使用
为什么要用IDE? 到现在为止,我们也是写过代码的人啦,但你有没有发现,每次写代码要新建文件.写完保存时还要选择存放地点,执行时还要切换到命令行调用python解释器,好麻烦呀,能否一气呵成,让我简单 ...
- 【java编程】加密算法-对称加密及AES加密算法
转载:https://www.jianshu.com/p/3840b344b27c?utm_campaign=maleskine&utm_content=note&utm_medium ...
- Python-pycurl模块的安装
先执行以下命令(因为我在另一个终端执行,所以history的编号有重复) 7 wget https://pypi.python.org/packages/source/p/pycurl/pycurl- ...
- gvim最简化设置,去掉工具栏和菜单栏
编辑vimrc文件(该文件位于gvim安装目录下),在文件末尾添加以下语句即可 set gfn=Courier_New:h14colorscheme torteset guioptions-=mset ...
- Centos7解决中文乱码问题
查看当前文字编码,发现都是en_US.UTF-8,也就是说还不能完美支持中文编码,如果是zh_CN.UTF-8,那就说明能够比较完美支持中文编码了(我猜的) [root@biaopei ~]# loc ...
- Python网络_UDP编程
本章将介绍UDP编程,更多内容请参考:Python学习指南 TCP是建立可靠连接,并且通信双方都可以以流的形式发送数据.相对TCP连接,UDP则是面向无连接的协议. 使用UDP协议时,不需要建立连接, ...