hdu1710 二叉树(C/C++)
hdu1710
题目地址:https://acm.dingbacode.com/showproblem.php?pid=1710
(最近几天杭电原网址开不进去了,之后应该可以通。。吧)
Binary Tree Traversals
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
In a preorder traversal of the vertices of T, we visit the root r followed by visiting the vertices of T1 in preorder, then the vertices of T2 in preorder.
In an inorder traversal of the vertices of T, we visit the vertices of T1 in inorder, then the root r, followed by the vertices of T2 in inorder.
In a postorder traversal of the vertices of T, we visit the vertices of T1 in postorder, then the vertices of T2 in postorder and finally we visit r.
Now you are given the preorder sequence and inorder sequence of a certain binary tree. Try to find out its postorder sequence.

9
1 2 4 7 3 5 8 9 6
4 7 2 1 8 5 9 3 6
7 4 2 8 9 5 6 3 1

1 #include<bits/stdc++.h>
2 using namespace std;
3 const int N=1010;
4 int pre[N],in[N],post[N];
5 int k;
6 struct node{
7 int value;
8 node *l,*r;
9 node(int value = 0, node *l=NULL,node *r=NULL):value(value),l(l),r(r){}
10 };
11
12 void buildtree(int l,int r,int &t,node *&root){ //建树,一定是*&root!!!!!!!!!!!!
13 int flag=-1;
14 for(int i=l;i<=r;i++){ //字母l-r,误敲成数字1也A了。。
15 if(in[i]==pre[t]){ //找到先序中的根在中序里的位置
16 flag=i; //存在flag中
17 break;
18 }
19 }
20 if(flag==-1) return; //结束
21 root=new node(in[flag]); //新建结点
22 t++;
23 if(flag>l) buildtree(l,flag-1,t,root->l);
24 if(flag<r) buildtree(flag+1,r,t,root->r);
25 }
26
27 void preorder(node *root){ //先序遍历
28 if(root!=NULL){
29 post[k++]=root->value; //输出
30 preorder(root->l);
31 preorder(root->r);
32 }
33 }
34
35 void inorder(node *root){ //中序遍历
36 if(root!=NULL){
37 inorder(root->l);
38 post[k++]=root->value;
39 inorder(root->r);
40 }
41 }
42
43 void postorder(node *root){ //后序遍历
44 if(root!=NULL){
45 postorder(root->l);
46 postorder(root->r);
47 post[k++]=root->value;
48 }
49 }
50
51 void remove_tree(node *root){ //释放空间
52 if(root==NULL) return;
53 remove_tree(root->l);
54 remove_tree(root->r);
55 delete root;
56 }
57
58 int main(){
59 int n;
60 while(~scanf("%d",&n)){
61 for(int i=1;i<=n;i++) cin>>pre[i];
62 for(int i=1;i<=n;i++) cin>>in[i];
63 node *root;
64 int t=1;
65 buildtree(1,n,t,root); //1到n,是数字1
66 k=0; //记录结点个数
67 postorder(root);
68 for(int i=0;i<k;i++){
69 printf("%d%c",post[i],i==k-1?'\n':' ');
70 }
71 remove_tree(root);
72 }
73 return 0;
74 }
hdu1710 二叉树(C/C++)的更多相关文章
- hdu1710 二叉树的遍历
Problem Description 已知前序和中序 求后序 Input The input contains several test cases. The first line of each ...
- 二叉树hdu1710
学习二叉树,看了两天也不明白,唉!acm之路让我体验到要付出巨大的努力,废话不多说,看我网上找到的代码: 此题题意很明确,给你先序遍历,中序遍历,求后序遍历.但代码就让我找不到东西了. http:// ...
- hdu1710(Binary Tree Traversals)(二叉树遍历)
Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- 二叉树的前序和中序得到后序 hdu1710
今天看学长发过来的资料上面提到了中科院机试会有一个二叉树的前序中序得到后序的题目.中科院的代码编写时间为一个小时,于是在七点整的时候我开始拍这个题目.这种类型完全没做过,只有纸质实现过,主体代码半个小 ...
- 如何求先序排列和后序排列——hihocoder1049+洛谷1030+HDU1710+POJ2255+UVA548【二叉树递归搜索】
[已知先序.中序求后序排列]--字符串类型 #1049 : 后序遍历 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Ho在这一周遇到的问题便是:给出一棵二叉树的前序和 ...
- hdu1710 Binary Tree Traversals(二叉树的遍历)
A binary tree is a finite set of vertices that is either empty or consists of a root r and two disjo ...
- hdu1710(二叉树的历遍)
/* Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- Binary Tree Traversals(HDU1710)二叉树的简单应用
Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- [数据结构]——二叉树(Binary Tree)、二叉搜索树(Binary Search Tree)及其衍生算法
二叉树(Binary Tree)是最简单的树形数据结构,然而却十分精妙.其衍生出各种算法,以致于占据了数据结构的半壁江山.STL中大名顶顶的关联容器--集合(set).映射(map)便是使用二叉树实现 ...
- 二叉树的递归实现(java)
这里演示的二叉树为3层. 递归实现,先构造出一个root节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...
随机推荐
- iis发布后设置文件夹用户安全权限
发布iis后异常截图: 401 - Unauthorized: Access is denied due to invalid credentials.You do not have permissi ...
- nginx(二) の 配置静态资源网站
首先在开始配置前,要想明白,nginx 配置 静态资源 服务时基本逻辑,其实就是要 将路由地址与服务器中文件真实的存储地址进行映射. 配置静态资源样例 配置前,首先要将当前配置文件的路径,写入到 ng ...
- linux下进程和线程的区别和联系
进程用fork()或者vfork()生成(vfork是专门为了加载其他程序的子程序而优化的,随着fork()的优化,vfork已经被优化) fork()生成的子进程与父进程共享代码区内存,对于其他内存 ...
- GeoServer 发布PostGIS数据库中的栅格数据
1.导入栅格数据 进入PostgreSQL\bin目录,利用raster2pgsql工具导入栅格数据,具体命令如下所示: <!-- 分块,切片存储到PostGIS数据库中 --> rast ...
- Python游戏开发常用库
PyWeek:编程挑战,主要是Python游戏开发方面的 PyGame:PyGame在优秀的SDL库之上添加了更多功能.允许使用python语言创建功能齐全的游戏和多媒体程序.具有高度的可移植性,几乎 ...
- FME视频教程
FME视频教程 分为三种 10分钟 2011 2012
- Tensorflow框架实现中的“三”种图
https://zhuanlan.zhihu.com/p/31308381 图(graph)是 tensorflow 用于表达计算任务的一个核心概念.从前端(python)描述神经网络的结构,到后端在 ...
- java的Stream
代码 List<Student> all = Student.getAll(); // 转换成数组 过滤所有的男性 Student[] students = all.stream().fi ...
- mysql数据库配置
1.下载mysql数据库解压到自己存放的路径 2.解压之后配置环境变量 [此电脑]- [右键]-[属性]-[高级系统设置]-[环境变量]- [找到系统变量中的path]-[选中]-[编辑]- [新建] ...
- python 识别登陆验证码图片(完整代码)
在编写自动化测试用例的时候,每次登录都需要输入验证码,后来想把让python自己识别图片里的验证码,不需要自己手动登陆,所以查了一下识别功能怎么实现,做一下笔记. 首选导入一些用到的库,re.Imag ...