POJ 2255 Tree Recovery(根据前序遍历和中序遍历,输出后序遍历)
题意:给出一颗二叉树的前序遍历和中序遍历的序列,让你输出后序遍历的序列。
思路:见代码,采用递归。
#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(根据前序遍历和中序遍历,输出后序遍历)的更多相关文章
- POJ 2255 Tree Recovery——二叉树的前序遍历、后序遍历、中序遍历规则(递归)
1.前序遍历的规则:(根左右) (1)访问根节点 (2)前序遍历左子树 (3)前序遍历右子树 对于图中二叉树,前序遍历结果:ABDECF 2.中序遍历的规则:(左根右) (1)中序遍历左子树 (2)访 ...
- POJ 2255 Tree Recovery && Ulm Local 1997 Tree Recovery (二叉树的前中后序遍历)
链接:poj.org/problem?id=2255 本文链接:http://www.cnblogs.com/Ash-ly/p/5463375.html 题意: 分别给你一个二叉树的前序遍历序列和中序 ...
- POJ 2255. Tree Recovery
Tree Recovery Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 11939 Accepted: 7493 De ...
- POJ 2255 Tree Recovery 二叉树的遍历
前序和中序输入二叉树,后序输出二叉树:核心思想只有一个,前序的每个根都把中序分成了两部分,例如 DBACEGF ABCDEFG D把中序遍历的结果分成了ABC和EFG两部分,实际上,这就是D这个根的左 ...
- Poj 2255 Tree Recovery(二叉搜索树)
题目链接:http://poj.org/problem?id=2255 思路分析:根据先序遍历(如DBACEGF)可以找出根结点(D),其后为左右子树:根据中序遍历(如ABCDEFG),已知根结点(D ...
- POJ 2255 Tree Recovery 二叉树恢复
一道和Leetcode的一道题目基本上一样的题目. 给出前序遍历和中序遍历序列,要求依据这些信息恢复一颗二叉树的原貌,然后按后序遍历序列输出. Leetcode上有给出后序和中序,恢复二叉树的. 只是 ...
- poj 2255 Tree Recovery 分治
Tree Recovery Description Little Valentine liked playing with binary trees very much. Her favorite g ...
- poj 2255 Tree Recovery(求后序遍历,二叉树)
版权声明:本文为博主原创文章,未经博主同意不得转载.vasttian https://blog.csdn.net/u012860063/article/details/37699219 转载请注明出处 ...
- POJ 2255 Tree Recovery 树的遍历,分治 难度:0
http://poj.org/problem?id=2255 #include<cstdio> #include <cstring> using namespace std; ...
随机推荐
- PCB特征阻抗计算神器Polar SI9000安装及破解指南
近年来,IC集成度的提高和应用,其信号传输频率和速度越来越高,因而在印制板导线中,信号传输(发射)高到某一定值后,便会受到印制板导线本身的影响,从而导致传 输信号的严重失真或完全丧失.这表明,PCB导 ...
- 把url后面的.html去掉
$url = "http://haichuang1997.bmlink.com/supply/dc_355472.html";echo rtrim($url, '.html');
- 转:Android studio Gradle
提高Android Studio中Gradle执行效率 分类: android studio2015-06-26 11:54 2374人阅读 评论(2) 收藏 举报 android studiogra ...
- mount.nfs: access denied by server while mounting localhost:/home/xuwq/minilinux/system
在执行命令如下: mount -t nfs localhost:/home/xuwq/minilinux/system /mnt 出现的错误: mount.nfs: access denied by ...
- module graceful-fs for npm
问题: 今天使用hexo时发现错误,hexo:command not found.于是重新安装hexo.但是在安装好npm后,却发现运行 npm 出现错误,没有找到模块graceful-fs,在纠结了 ...
- ASP.NET Core 1.0
.NET Core dotnet 命令大全:http://www.cnblogs.com/linezero/p/dotnet.html http://www.cnblogs.com/Wddpct/p/ ...
- Struct是干什么的
对于结构(Struct)这一看起来比较特殊的东西(用的比较少,只好用东西来形容了),真心用得少,只有在被问起的时候,才会想起,看看它到底是什么吧. 先给一个链接:http://www.cnblogs. ...
- Makefile之wildcard
1.wildcard : 扩展通配符2.notdir : 去除路径3.patsubst :替换通配符 例子:建立一个测试目录,在测试目录下建立一个名为sub的子目录$ mkdir test$ cd t ...
- Linux 挂载存储方法
申请的虚拟机因总宕机,处理完之后多分配了我100G空间,还是狠讲究的嘛,挂载方法如下: 初始磁盘挂载情况:[root@wmstest ~]# df -hFilesystem Size Used Ava ...
- RaddioButton控件
<GroupBox Margin="5"> <StackPanel> <RadioButton IsChecked="true"& ...