codevs2010 求后序遍历
难度等级:白银
2010 求后序遍历
输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。
共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。
仅一行,表示树的后序遍历序列。
abdehicfg
dbheiafcg
dhiebfgca
输入长度不大于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 求后序遍历的更多相关文章
- HDU1710---树(知前序遍历与中序遍历 求后序遍历)
知前序遍历与中序遍历 求后序遍历 #include<iostream> #include<cstring> #include<queue> #include< ...
- codevs 2010 求后序遍历
时间限制: 1 s空间限制: 64000 KB题目描述 Description输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列.输入描述 Input Description共两行,第一行一个字符 ...
- 求后序遍历x
题目描述 Description 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列. 输入描述 Input Description 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串, ...
- codevs 2010 求后序遍历x
题目描述 Description 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列. 输入描述 Input Description 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串, ...
- c++树,知道前序和中序求后序遍历
经常有面试题就是知道一棵树的前序遍历和中序遍历让你写出后序遍历,这个慢慢画是能画出来的,但是要很快的弄出来还是要懂原理. 首先说一下三种遍历:所谓的前序后序和中序都是遍历时遍历根节点的顺序.子树的话依 ...
- poj 2255 Tree Recovery(求后序遍历,二叉树)
版权声明:本文为博主原创文章,未经博主同意不得转载.vasttian https://blog.csdn.net/u012860063/article/details/37699219 转载请注明出处 ...
- hdu 5444 Elven Postman(根据先序遍历和中序遍历求后序遍历)2015 ACM/ICPC Asia Regional Changchun Online
很坑的一道题,读了半天才读懂题,手忙脚乱的写完(套上模板+修改模板),然后RE到死…… 题意: 题面上告诉了我们这是一棵二叉树,然后告诉了我们它的先序遍历,然后,没了……没了! 反复读题,终于在偶然间 ...
- 【hihoCoder】1049.后序遍历
问题:http://hihocoder.com/problemset/problem/1049?sid=767510 已知一棵二叉树的前序遍历及中序遍历结果,求后序遍历结果 思路: 前序:根-左子树- ...
- Tree Recovery(前序中序求后序)
Tree Recovery Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 14640 Accepted: 9091 De ...
随机推荐
- 编译生成IOS开发使用的FFmpeg的过程
前言:本篇随笔纯属是参照<iOS 使用 FFmpeg>的过程,本人自己操作了一遍,但是本人记性不好,觉得这样的过程可以记录在博客中,以后需要可以快速回头翻阅细节.所以特地参考<iOS ...
- Mysql查询按照某字段指定顺序排序
在项目当中用到Sphinx的时候,很多人遇到了这样的问题:使用mysql+Sphinx检索出了相关度的ID后,如何按照指定ID在Mysql中进行排序呢?这里是我在项目中的解决方法: 1 SELECT ...
- 使用windows服务更新站点地图
由于公司平台访问人数逐渐增多,公司项目的数据库已经几次出现宕机现象.为减轻数据库压力,我上个月对公司项目做了下调整.把新闻板块提取出来单独一个站点,单独一个数据库.减少了主站点和数据库的负担和压力. ...
- hypervisor与VMware共存方法
bcdedit /set hypervisorlaunchtype offbcdedit /set hypervisorlaunchtype auto
- 使用CSS3滤镜让图片反转颜色
CSS提供的滤镜也是一大亮点,我一直痴迷其中,有些滤镜的效果很有用,可是有些的滤镜效果可能只是为了玩玩儿,CSS常见的滤镜有这些:grayscale, blur, sepia,所有常见的过滤器.但是如 ...
- 6、软件配置工程师要阅读的书籍 - IT软件人员书籍系列文章
软件配置管理工程师的工作也是贯穿整个项目过程的.其主要针对项目中的各种文档.技术源码等等进行归档控制.一般的配置项比如需求说明书,概要设计,详细设计,测试文档,用户手册等,还有源代码管理,数据库文档文 ...
- Android中在sdcard上创建文件夹
//在SD卡上创建一个文件夹 public void createSDCardDir(){ if(Environment.MEDIA_MOUNTED.equals(Environment ...
- Mac brew命令
一.简介 Brew又叫Homebrew,是MAC中的一款软件包管理工具,通过brew可以很方便的在MAC中安装软件或者是卸载软件. 二.安装 ruby -e "$(curl -fsSL ht ...
- linux 通过scp 复制备份恢复mysql数据表
最近客户有个需求,小弟对于运维的东西也是半瓶醋,所以就果断的摸索了下.折磨了一个晚上终于算是搞定了.因为是两个不同的服务器,本来想用ftp,无奈小弟不是很熟悉,所以就用了scp,但是scp有个问题就是 ...
- jquery back to top 页面底部的返回顶部按钮
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...