难度等级:白银

2010 求后序遍历

题目描述 Description

输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。

输入描述 Input Description

共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。

输出描述 Output Description

仅一行,表示树的后序遍历序列。

样例输入 Sample Input

abdehicfg

dbheiafcg

样例输出 Sample Output

dhiebfgca

数据范围及提示 Data Size & Hint

输入长度不大于255。

一、解答本题首先搞清几个概念:

中序遍历:左子树先序遍历+根+右子树先序遍历

先序遍历:根+左子树中序遍历+右子树中序遍历

后序遍历:左子树后序遍历+右子树后序遍历+根

即先、左、右是根据根的遍历顺序命名的

二、1、先序遍历的第一个是根,在中序遍历中找到这个根,则中序遍历中根的左边是左子树,右边是右子树

2、先序遍历中,若当前位置的节点还有孩子,则当前位置的下一个位置,是以当前位置为根的树的左子树的根。例:先序遍历中a的下一个是b,且a还有孩子,那么a的左子树的根节点是b。所以先序遍历中左子树的第一个节点的位置就是当前位置的下一个。

根据根在中序遍历中的位置,可以确定先序遍历中左子树的最后一个节点的位置。例:先序遍历一部分为abde,中序遍历一部分为dbea,根据前面说的,当前位置是a,以a为根的左子树的根是b,中序遍历中当前范围a左边的节点都是a的左子树,一共有4-1=3个,a在先序遍历中是第1个,所以先序遍历中以a为根节点的左子树的范围的最后一个为1+3=4。

3、按照上述方法递归右子树,后序遍历最后输出根

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
string mid,pre;
void dfs(int lq,int lz,int rq,int rz)//当前范围在先序遍历中为[lq,lz],在中序遍历中为[rq,rz]
{
int z=mid.find(pre[lq]);//在中序遍历中找到根的位置
if(z>rq) dfs(lq+,lq+z-rq,rq,z-);
if(z<rz) dfs(lq+z-rq+,lz,z+,rz);//if判断z不是单独的一个根
cout<<pre[lq];
}
int main()
{
cin>>pre>>mid;//pre为先序遍历,mid为中序遍历
dfs(,pre.size()-,,mid.size()-);
}

codevs2010 求后序遍历的更多相关文章

  1. HDU1710---树(知前序遍历与中序遍历 求后序遍历)

    知前序遍历与中序遍历 求后序遍历 #include<iostream> #include<cstring> #include<queue> #include< ...

  2. codevs 2010 求后序遍历

    时间限制: 1 s空间限制: 64000 KB题目描述 Description输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列.输入描述 Input Description共两行,第一行一个字符 ...

  3. 求后序遍历x

    题目描述 Description 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列. 输入描述 Input Description 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串, ...

  4. codevs 2010 求后序遍历x

    题目描述 Description 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列. 输入描述 Input Description 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串, ...

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

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

  6. poj 2255 Tree Recovery(求后序遍历,二叉树)

    版权声明:本文为博主原创文章,未经博主同意不得转载.vasttian https://blog.csdn.net/u012860063/article/details/37699219 转载请注明出处 ...

  7. hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online

    很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死…… 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了……没了! 反复读题,终于在偶然间 ...

  8. 【hihoCoder】1049.后序遍历

    问题:http://hihocoder.com/problemset/problem/1049?sid=767510 已知一棵二叉树的前序遍历及中序遍历结果,求后序遍历结果 思路: 前序:根-左子树- ...

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

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

随机推荐

  1. redis使用笔记

    mysql---select * from table where xx;insert into table(name1,name2..) values(value1,value2);delete f ...

  2. Android系统性能调优工具介绍

    http://blog.csdn.net/innost/article/details/9008691 经作者授权,发表Tieto某青年牛的一篇<程序员>大作. Android系统性能调优 ...

  3. Azure File

    Azure File 服务使用标准 SMB 2.1 协议提供文件共享.Azure 中运行的应用程序现在可以使用熟悉的标准文件系统 API(如 ReadFile 和 WriteFile)在虚拟机之间轻松 ...

  4. Third glance in Go

    在Go語言裏關於數組(Array),切片(Slice)和映射表(Map)的使用是非常常見的.有過其他語言編程背景的人會比較熟悉一下,但是也是因爲過於的熟悉,從而導致一個慣性思維,往往就會踢到“石頭”, ...

  5. ORACLE 10g AWR报告设置总结

      1:查看.修改AWR报告快照数据的采样间隔.保存策略 SQL> COL DBID FOR 999999999999 SQL> COL SNAP_INTERVAL FOR A26 SQL ...

  6. Tomcat:Custom a common error page valve for all web application in tomcat

    如果在一个Tomcat Server上会部署多个Web应用,又希望这多个Web应用共用一套错误页面,而不是使用默认的错误页面.就需要自定义错误页面了. 在每个web应用中都可以通过error-page ...

  7. spring ehcache 页面、对象缓存

    一.Ehcache基本用法 CacheManager cacheManager = CacheManager.create(); // 或者 cacheManager = CacheManager.g ...

  8. 检测PC端和移动端的方法之一

    window.mobileCheck = function() { var check = false; (function(a){if(/(android|bb\d+|meego).+mobile| ...

  9. Sql Server 2008R2 遇到了BCP导入各种中文乱码的问题

    今天玩BCP导入数据的时候,有文件格式,有中文字符串问题……以下是历程,和大家分享一下,希望不要走我的弯路 主要那个表是一个翻译表,一个文件里面内涵几十种语言,所以很容易发现问题. 0.使用最常用的语 ...

  10. 使用ImitateLogin模拟登录百度

    在之前的文章中,我已经介绍过一个社交网站模拟登录的类库:imitate-login ,这是一个通过c#的HttpWebRequest来模拟网站登录的库,之前实现了微博网页版和微博Wap版:现在,模拟百 ...