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; ...
随机推荐
- cass实体编码列表
地物名称 编码 图层 类别 参数一 参数二 实体类型 三角点 131100 KZD 20 gc113 3 SPECIAL,1 三角点分数线 131110 KZD 附 LINE 三角点高程注记 1311 ...
- App性能提升方法
总体思路:精简请求数 1.css sprit 图像拼合,将所有可拼接的所有图像拼接为一整张图像,然后再利用css中的position定位来处理,降低图片的请求数 2.懒加载:只渲染客户端用户可见区域[ ...
- JS增删改HTML表格
要求如下: 写一个html页面,里面有一个表格,储存用户信息,包括:用户名,密码,姓名,邮箱,电话,qq,身份证号. 现在要通过js对表格进行动态的增删改查(只是内存操作即可): 首先,加载页面时用j ...
- Java应用短信猫
首先确定短信猫正常连接到主机,并安装SIM卡.先用超级终端测试短息猫能不能用.安装minicom:#sudo apt-get install minicom安装完成后,执行#sudo minicom ...
- Spring配置文件web.xml关于拦截
1.<!-- 加载springMVC --><servlet><servlet-name>dispater</servlet-name><serv ...
- Java基础(二)
下面来实现一个小程序,要求如下: 从键盘接收一个字符串,程序对其中所有的字符进行排序,例如键盘输入:helloitcast程序打印acehillostt 步骤分析: 1.键盘录入字符串,Scanner ...
- PHP:strpos()-返回字符串在另一个字符串中第一次出现的位置
strpos()函数返回字符串在另一个字符串中第一次出现的位置.如果没有找到该字符串,则返回false. 语法:strpos(sting, find [, start]) string ,必须,要搜索 ...
- Eclipse 代码提示功能设置。
1. 解决实例化时自动补全不必要的单词问题 2. 以MyEclipse 6.5重新配图 鉴 于网上的批评之声甚大,我只想说明我的想法:这样的增强代码提示,最终是用来辅助我们 ...
- 开发流程习惯的养成—TFS简单使用
才开始用,所以是个很基础的介绍,欢迎大家一起交流学习 一.追本溯源 讲到开发流程,还要从敏捷开始,因为敏捷才有了开发流程的重视,整个流程也是按照敏捷的思想进行的,这里不再叙述敏捷的定义 敏捷的流程(个 ...
- 【转载】 使用Anemometer基于pt-query-digest将MySQL慢查询可视化
原文地址:使用Anemometer基于pt-query-digest将MySQL慢查询可视化 作者:84223932 本文主要介绍使用Anemometer基于pt-query-digest将MySQL ...