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节点,先判断左子节点是否为空,为空则构造左子节点,否则进入下一步判断右子节点是否为空,为空则构造右子节点. 利用层数控制迭代次数. 依次递归第二 ...
随机推荐
- vue2 安装swiper
npm install swiper@5.4.5 -D
- MybatisPlus #{param}和${param}的用法详解
作用 mybatis-plus接口mapper方法中的注解(如@Select)或者xml(如)传入的参数是通过#{param}或者${param}来获取值. 区别 1.解析方式: #{param}:会 ...
- Vue 事件监听
事件监听 v-on 使用v-on进行事件绑定监听,回调函数写在methods中.可以使用@的这种简写形式来代替v-on,当事件源无参数传递时,可省略括号. 语法如下所示: <button @:事 ...
- C# VS2019修改工程名
1.修改解决方案的名称:选择解决方案的名称,右键重命名即可 2.修改项目名称,方法同上,不再赘述 3.修改项目的程序集名称和默认命名空间:选择项目,右键属性,弹出如下对话框 4.替换项目或解决方案中的 ...
- linux dma
https://bootlin.com/pub/conferences/2015/elc/ripard-dmaengine/ripard-dmaengine.pdf https://biscuitos ...
- excel数字转日期
import datetime delta = datetime.timedelta() today = datetime.datetime.strptime('1899/12/30', '%Y/%m ...
- EBS的配置文件
默认账套 select fnd_profile.value('GL_SET_OF_BKS_ID') FROM DUAL; >> 2026 这样就能通过2026去获取一些账套上的配置 比如c ...
- onnxruntime源码解析之C接口简介
一.C接口 1. 简介 其他语言的接口都是在C接口的基础上,进一步的封装. C的接口头文件为:onnxruntime_c_api.h 头文件内包含了详细的注释和说明. 总体上,除了一些数据结构的定义, ...
- Android拍照程序适配
public void takePic(){ String forderPath = getExternalFilesDir("") + "/pic"; Fil ...
- 防止react-re-render: Why Suspense and how ?
近期内部项目基础项目依赖升级,之前使用的路由缓存不再适用,需要一个适配方案.而在此过程中react re-render算是困扰了笔者很久.后来通过多方资料查找使用了freeze解决了此问题.本文主要论 ...