题意:给出一颗二叉树的前序遍历和中序遍历的序列,让你输出后序遍历的序列。

思路:见代码,采用递归。

#include <iostream>
#include <stdio.h>
#include <string.h>
/*
由一颗二叉树的前序遍历和中序遍历,输出该二叉树的后序遍历。
*/
using namespace std;
const int maxn=;
int len;
char dlr[maxn],ldr[maxn]; //dlr:前序遍历的序列,ldr:中序遍历的序列
/*
l1,r1:前序遍历的区间段
l2,r2:中序遍历的区间段
这两个区间对应的是同一颗子树
*/
void dfs(int l1,int r1,int l2,int r2) {
int k;
/*
由于l1,r1为前序遍历,所以dlr[l1]必为该子树的根节点,因此在ldr的区间段[l2,r2]中查找与根节点相同的字符,设索引为k。
若k>l2,说明左子树存在,节点有leftsize=k-l2个。
中序遍历中[l2,k-1]为该左子树的遍历结果,前序遍历中[l1+1,l1+a]为左子树的遍历结果,然后递归。
若k>r2,说明右子树存在。
中序遍历中[k+1,r2]为该右子树的遍历结果,前序遍历中[l1+a+1,r1]为右子树的遍历结果,然后递归。
最后输出该树的根节点dlr[l1]或者ldr[k]。
*/
for(int i=l2; i<=r2; i++) {
if(dlr[l1]==ldr[i]) {
k=i;
break;
}
}
int leftsize=k-l2; //左子树的大小
if(k>l2) {
dfs(l1+,l1+leftsize,l2,k-);
}
if(k<r2){
dfs(l1+leftsize+,r1,k+,r2);
}
printf("%c",dlr[l1]); //输出根节点
}
int main() {
while(scanf("%s%s",dlr,ldr)!=EOF) {
len=strlen(dlr);
dfs(,len-,,len-);
printf("\n");
}
return ;
}

POJ 2255 Tree Recovery(根据前序遍历和中序遍历,输出后序遍历)的更多相关文章

  1. POJ 2255 Tree Recovery——二叉树的前序遍历、后序遍历、中序遍历规则(递归)

    1.前序遍历的规则:(根左右) (1)访问根节点 (2)前序遍历左子树 (3)前序遍历右子树 对于图中二叉树,前序遍历结果:ABDECF 2.中序遍历的规则:(左根右) (1)中序遍历左子树 (2)访 ...

  2. POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)

    链接:poj.org/problem?id=2255 本文链接:http://www.cnblogs.com/Ash-ly/p/5463375.html 题意: 分别给你一个二叉树的前序遍历序列和中序 ...

  3. POJ 2255. Tree Recovery

    Tree Recovery Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 11939   Accepted: 7493 De ...

  4. POJ 2255 Tree Recovery 二叉树的遍历

    前序和中序输入二叉树,后序输出二叉树:核心思想只有一个,前序的每个根都把中序分成了两部分,例如 DBACEGF ABCDEFG D把中序遍历的结果分成了ABC和EFG两部分,实际上,这就是D这个根的左 ...

  5. Poj 2255 Tree Recovery(二叉搜索树)

    题目链接:http://poj.org/problem?id=2255 思路分析:根据先序遍历(如DBACEGF)可以找出根结点(D),其后为左右子树:根据中序遍历(如ABCDEFG),已知根结点(D ...

  6. POJ 2255 Tree Recovery 二叉树恢复

    一道和Leetcode的一道题目基本上一样的题目. 给出前序遍历和中序遍历序列,要求依据这些信息恢复一颗二叉树的原貌,然后按后序遍历序列输出. Leetcode上有给出后序和中序,恢复二叉树的. 只是 ...

  7. poj 2255 Tree Recovery 分治

    Tree Recovery Description Little Valentine liked playing with binary trees very much. Her favorite g ...

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

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

  9. POJ 2255 Tree Recovery 树的遍历,分治 难度:0

    http://poj.org/problem?id=2255 #include<cstdio> #include <cstring> using namespace std; ...

随机推荐

  1. HyperMesh生成Flac3D的剖分网格

    本帖的目的是探索煤矿沉积岩层采煤过程中的力学分析模拟的前处理方法,计算软件采用公认的Flac3D差分方法. 目前,Flac3D官方提供的剖分网格的生成方法有三种.一是直接使用命令和Fish语句生成,这 ...

  2. 简明Python中的一个小错误

    最近在学Python,先看的是<Python基础教程>,后来经别人推荐,感觉网络上的<简明Python教程>也挺好的,在里面发现一个小错误. 网址如下:http://sebug ...

  3. SSH 正向/反向代理小记

    上周因为玩耍Minecraft的原因,折腾了下ssh的正向.反向代理,不得不说,科技改变命运..了解了基础的用法之后,很多跨域的事情都可以通过代理解决,而且只需要ssh帐号权限即可. 那么就简单来介绍 ...

  4. fluent nhibernate 初体验

    离开.net框架两年时间,发展的很快呀.原先自我感觉良好到以为只差一个MVP的考核什么的,现在觉得真的差好远了. 呵呵,废话就不多说了.这次花了两天时间才拿下fluent nhibernate的fir ...

  5. LINQ to XML(1)

    LINQ to XML可以两种方式和XML配合使用.第一种方式是作为简化的XML操作API,第二种方式是使用LINQ查询工具.下面我使用的是第二种方式. 主要内容:用LINQ查询语句对XML文件里的数 ...

  6. Python开发【第一篇】Python基础之自定义模块和内置模块

    为什么要有模块,将代码归类.模块,用一砣代码实现了某个功能的代码集合. Python中叫模块,其他语言叫类库. 类似于函数式编程和面向过程编程,函数式编程则完成一个功能,其他代码用来调用即可,提供了代 ...

  7. openerp 常见问题 OpenERP在哪储存附件?(转载)

    OpenERP在哪储存附件? 原文地址:http://cn.openerp.cn/where_to_store_attachement_in_openerp_7/ 我们知道对OpenERP中的每个内部 ...

  8. 万网域名解析到IP地址

    进入https://home.console.aliyun.com/#/的阿里云控制台 再自己购买的域名列表里进行操作 添加一个A解析

  9. SQL的自增列如何重置

    第一种方法:首先去除该列自增的标识,然后再修改id的值,成功修改后,再加上自增标识:如果不修改自增标识,会报错:“无法更新标识列”. 第二种方法:删除该自增列,而后重建一个自增列.

  10. ubuntu c程序操作系统设备

    最近做一个局域网聊天系统,最后想操作系统播放音频文件.其实,Linux下的声音设备编程比大多数人想象的要简单得多.一般说来,我们常用的声音设备是内部扬声器和声卡,它们都对应/dev目录下的一个或多个设 ...