题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1710

解题思路:可以由先序和中序的性质得到 : 先序的第一个借点肯定是当前子树的根结点, 那么在

中序中找到这个结点, 则这个结点左边的节点属于左子树, 右边的属于右子树。然后递归遍历就可以了。
样例:
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
如图:
 
因此,用深搜就能轻松解决了,注意DFS中的变量,以及向清楚DFS的条件,这题就简单多了,具体看代码吧:
#include<iostream>
#include<string.h>
#include<cstdio>
#include<stack>
using namespace std;
#define maxn 1001
int m,n,a[maxn],b[maxn]; //先序数组和后序数组
stack<int>Q; //存放父节点
void dfs(int l1,int r1,int l2,int r2)
{//l1,r1,是先序遍历的数组的开始和末尾,l2,r2是中序遍历的数组的开始和末尾
int i,j;
Q.push(a[l1]); //父节点入栈
for(i=l2;i<=r2;i++)
if(b[i]==a[l1]) break;
//i 父节点在中序遍历的位置,j 左子树和右子树在先序遍历的分界点,即右子树的父节点
j=l1+(i-l2+);
if(j<=r1&&i-<=r2) dfs(j,r1,i+,r2); //求解右子树
if(l1+<=j-&&l2<=i-) dfs(l1+,j-,l2,i-); //求解左子树
//不能换位置,根据输出的后序遍历图可以看出,栈的后方为右半部分
}
int main()
{
while(cin>>n)
{
for(int i=;i<n;i++) scanf("%d",&a[i]);
for(int i=;i<n;i++) scanf("%d",&b[i]);
dfs(,n-,,n-);
while(!Q.empty())
{
printf("%d",Q.top());
Q.pop();
if(Q.size()) printf(" ");
}
cout<<endl;
}
return ;
}
 

HDU 1710Binary Tree Traversals(已知前序中序,求后序的二叉树遍历)的更多相关文章

  1. HLG2040二叉树遍历已知前中,求后

    二叉树的遍历 Time Limit: 1000 MS Memory Limit: 32768 K Total Submit: 60(34 users) Total Accepted: 34(30 us ...

  2. HDU 1710 二叉树遍历,输入前、中序求后序

    1.HDU  1710  Binary Tree Traversals 2.链接:http://acm.hust.edu.cn/vjudge/problem/33792 3.总结:记录下根结点,再拆分 ...

  3. HDU 1710-Binary Tree Traversals(二进制重建)

    Binary Tree Traversals Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  4. Tree Recovery(前序中序求后序)

    Tree Recovery Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 14640   Accepted: 9091 De ...

  5. c++树,知道前序和中序求后序遍历

    经常有面试题就是知道一棵树的前序遍历和中序遍历让你写出后序遍历,这个慢慢画是能画出来的,但是要很快的弄出来还是要懂原理. 首先说一下三种遍历:所谓的前序后序和中序都是遍历时遍历根节点的顺序.子树的话依 ...

  6. PAT (Advanced Level) 1136~1139:1136模拟 1137模拟 1138 前序中序求后序 1139模拟

    1136 A Delayed Palindrome(20 分) 题意:给定字符串A,判断A是否是回文串.若不是,则将A反转得到B,A和B相加得C,若C是回文串,则A被称为a delayed palin ...

  7. python实现根据前序与中序求后序

    我就不板门弄斧了求后序 class Tree(): def __init__(self,x): self.value=x self.left=None self.right=None class So ...

  8. UVa 二叉树重建(先序+中序求后序)

    题意是给出先序和中序,求出后序. 先序遍历先访问根结点,通过根结点可以在中序中把序列分为左子树部分和右子树部分,我建了一个栈,因为后序遍历最后访问根结点,所以把每次访问的根结点放入栈中.因为后序遍历先 ...

  9. 【美国血统 American Heritage 题解】已知前序中序 求后序

    题目: 题目名称:美国血统 American Heritage 题目来源:美国血统 American Heritage ## 题目描述 农夫约翰非常认真地对待他的奶牛们的血统.然而他不是一个真正优秀的 ...

随机推荐

  1. Rendering Resources

    1. Real-Time Rendering Resources http://www.realtimerendering.com/ 2. Books on Amazon http://www.ama ...

  2. 调用数据库-corina

    pym = mysql(host='#####', port=3306, user='######', password='########', database='algorithm') #查询数据 ...

  3. Android窗口背景的优化

    视图有背景,每个窗口也是有背景的.每一Activity是一个窗口,每一个Activity都有不同得背景.界面的绘画顺序如下:窗口——跟视图 ——子视图.当我们的跟视图已经覆盖了整个窗口的时候 ,程序还 ...

  4. Kendo UI中TreeView 放入tabstrip中,大数据量时超过边框的解决方案。

    参考http://www.kendoui.com/forums/ui/tabstrip/tabstip-with-treeview-treeview-breaking-out-of-tabstrip. ...

  5. 纯css手写圆角气泡对话框 微信小程序和web都适用

    嗯……我们设计师强烈要求一定要圆角!圆角的气泡对话框,不要那种尖角的.这其中还遇上了个尴尬的问题,z-index不生效 无非就是两种方法,一种是使用图片再定位拼接起来使用,太简单了具体就不详细的说了. ...

  6. 2018.10.19 NOIP训练 yk赚钱记(01分数规划)

    传送门 其实是一个裸的最优比率生成树. 注意精度的控制就行了. 代码

  7. PHP compact函数

    $firstname = "Peter"; $lastname = "Griffin"; $age = "41"; $data = comp ...

  8. 数塔问题-hdu-2084(dp)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2084 思路:要求从顶到底的最大值,可以反过来考虑,从底部向上. 只有下面一行的最大值确定,这一行的最大 ...

  9. POJ 3320 Jessica's Reading Problem (滑动窗口)

    题意:给定一个序列,求一个最短区间,使得这个区间包含所有的种类数. 析:最近刚做了几个滑动窗口的题,这个很明显也是,肯定不能暴力啊,时间承受不了啊,所以 我们使用滑动窗口来解决,要算出所有的种数,我用 ...

  10. 高博-《视觉SLAM十四讲》

    0 讲座 (1)SLAM定义 对比雷达传感器和视觉传感器的优缺点(主要介绍视觉SLAM) 单目:不知道尺度信息 双目:知道尺度信息,但测量范围根据预定的基线相关 RGBD:知道深度信息,但是深度信息对 ...