hdu 1710 Binary Tree Traversals 前序遍历和中序推后序
题链;http://acm.hdu.edu.cn/showproblem.php?pid=1710
Binary Tree Traversals
Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 4205 Accepted Submission(s): 1904
or ordered. They are preorder, inorder and postorder. Let T be a binary tree with root r and subtrees T1,T2.
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.

they are always correspond to a exclusive binary tree.
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
然后这个根把中序分为两半,左边是左子树,右边是右子树。
然后递归下就ok了。
#include <cstdio>
#include <algorithm>
using namespace std; struct tree
{
struct tree* l;
struct tree* r;
int val;
tree()
{
l=NULL;
r=NULL;
}
}; int pre[1010],in[1010];
int n;
tree* root;
void build(int num,int l,int r,tree *rt)//pre num in_l in_r
{
int flag=-1;
while(flag==-1)
{
for(int i=l;i<=r;i++)
{
if(pre[num]==in[i])
flag=i;
}
if(flag==-1)
num++;
}
if(flag-l>0)
{
rt->l=(tree*)malloc(sizeof(tree));
*(rt->l)=tree();
build(num+1,l,flag-1,rt->l);
}
if(r-flag>0)
{
rt->r=(tree*)malloc(sizeof(tree));
*(rt->r)=tree();
build(num+1,flag+1,r,rt->r);
}
rt->val=pre[num];
} void post(tree* nw)
{
if(nw->l!=NULL)
post(nw->l);
if(nw->r!=NULL)
post(nw->r); if(nw==root)
printf("%d",nw->val);
else
printf("%d ",nw->val); } void del(tree* nw)
{
if(nw->l!=NULL)
del(nw->l);
if(nw->r!=NULL)
del(nw->r);
free(nw);
} int main()
{
while(scanf("%d",&n)!=EOF)
{
for(int i=0;i<n;i++)
scanf("%d",&pre[i]);
for(int i=0;i<n;i++)
scanf("%d",&in[i]);
root=(tree*)malloc(sizeof(tree));
*root=tree();
build(0,0,n-1,root);
post(root);
puts("");
del(root);
}
return 0;
}
hdu 1710 Binary Tree Traversals 前序遍历和中序推后序的更多相关文章
- HDU 1710 Binary Tree Traversals (二叉树遍历)
Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU 1710 Binary Tree Traversals(树的建立,前序中序后序)
Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU 1710 Binary Tree Traversals(二叉树遍历)
传送门 Description A binary tree is a finite set of vertices that is either empty or consists of a root ...
- 【二叉树】hdu 1710 Binary Tree Traversals
acm.hdu.edu.cn/showproblem.php?pid=1710 [题意] 给定一棵二叉树的前序遍历和中序遍历,输出后序遍历 [思路] 根据前序遍历和中序遍历递归建树,再后续遍历输出 m ...
- HDU 1710 Binary Tree Traversals
题意:给出一颗二叉树的前序遍历和中序遍历,输出其后续遍历 首先知道中序遍历是左子树根右子树递归遍历的,所以只要找到根节点,就能够拆分出左右子树 前序遍历是按照根左子树右子树递归遍历的,那么可以找出这颗 ...
- HDU 1710 Binary Tree Traversals(二叉树)
题目地址:HDU 1710 已知二叉树先序和中序求后序. #include <stdio.h> #include <string.h> int a[1001], cnt; ty ...
- hdu 1701 (Binary Tree Traversals)(二叉树前序中序推后序)
Binary Tree Traversals T ...
- hdu1710(Binary Tree Traversals)(二叉树遍历)
Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
- HDU 1710 二叉树的遍历 Binary Tree Traversals
Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/O ...
随机推荐
- LeetCode(111) Minimum Depth of Binary Tree
题目 Given a binary tree, find its minimum depth. The minimum depth is the number of nodes along the s ...
- 降维算法-PCA主成分分析
1.PCA算法介绍主成分分析(Principal Components Analysis),简称PCA,是一种数据降维技术,用于数据预处理.一般我们获取的原始数据维度都很高,比如1000个特征,在这1 ...
- .NET中常见的加解密方式
在互联网普及的初期,人们更关注单纯的连接性,以不受任何限制地建立互联网为最终目的.正如事情都具有两面性,互联网的便捷性给人们带来了负面问题,计算机病毒的侵害.信息泄露.网络欺诈等利用互联网的犯罪行为日 ...
- angular 组件之间传值
/** * Created by Administrator on 2017/8/28. */ var app =angular.module('app',[]); app.directive('fo ...
- 【C#】C#数据类型和VB的区别
导读:看完了C#,需要总结的有很多东西.开始没有怎么在意,根本没有意识到,那些视频是教给了我一种新的编程语言,我就真的是像看电视剧一样的看完了.猛然想起了学过的VB,这是目前为止,我接触到的仅有的语言 ...
- 03-for循环in遍历
<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8&quo ...
- HDU——2612Find a way(多起点多终点BFS)
Find a way Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total ...
- 点击不同按钮,加载不同的页面(不使用iframe的情况下)
<button id="button1">Load Html1</button> <button id="button2"> ...
- Count Numbers
Count Numbers 时间限制: 8 Sec 内存限制: 128 MB 题目描述 Now Alice wants to sum up all integers whose digit sum ...
- 洛谷 [T21776] 子序列
题目描述 你有一个长度为 \(n\) 的数列 \(\{a_n\}\) ,这个数列由 \(0,1\) 组成,进行 \(m\) 个的操作: \(1\ l\ r\) :把数列区间$ [l,r]$ 内的所有数 ...