POJ 2255 Tree Recoveryw(二叉树)
题目原网址:http://poj.org/problem?id=2255
题目中文翻译:
Description
小瓦伦丁非常喜欢玩二叉树。 她最喜欢的游戏是用大写字母构造的随机二叉树。
这是她的一个创作的例子:
D
/ \
/ \
B E
/ \ \
/ \
\
A C G
/
/
F
为了为后代记录她的树,她为每棵树写了两个字符串:前序遍历(根,左子树,右子树)和中序遍历(左子树,根,右子树)。 对于上面绘制的树,前序遍历是DBACEGF,中序遍历是ABCDEFG。
她认为这样一对字符串会提供足够的信息来重建树(但她从未尝试过)。
现在,多年以后,再次看到这些字符串,她意识到重建树确实是可能的,因为她从未在同一棵树上使用过两次相同的字母。
然而,手工重建很快就变得单调乏味。
所以现在她要求你写一个为她工作的程序!
Input
输入将包含一个或多个测试用例。
每个测试用例由一行包含两个字符串preord和inord,表示二叉树的前序遍历和中序遍历。 两个字符串都由不重复的大写字母组成。 (因此它们不超过26个字符。)
输入由文件结束(EOF)终止。
Output
对于每个测试用例,恢复瓦伦丁的二叉树并打印一行树的后序遍历(左子树,右子树,根)。
Sample Input
DBACEGF ABCDEFG
BCAD CBAD
Sample Output
ACBFGED
CDAB
解题思路:
通过先序遍历找到根,再根据中序遍历性质(一个节点的左儿子一定在它前面出现,而右儿子一定在它后面),找出这个节点的左右儿子,建树,最后输出后序遍历.
AC代码:
#include<cstdio>
#include<iostream>
#include<string>
#include<algorithm>
#include<cstring> using namespace std; char q[],z[];
int xb; void work(int l,int r) {
char a;
int i;
if(l > r) return ;
a = q[xb++];
for(i = l;i <= r; i++)
if(a == z[i])
break;
work(l,i - );
work(i + ,r);
cout << a;
} int main()
{
while(scanf("%s%s",q,z) != EOF) {
getchar();
int len = strlen(z);
xb = ;
work(,len-);
cout << endl;
} return ;
}
POJ 2255 Tree Recoveryw(二叉树)的更多相关文章
- POJ 2255 Tree Recovery 二叉树的遍历
前序和中序输入二叉树,后序输出二叉树:核心思想只有一个,前序的每个根都把中序分成了两部分,例如 DBACEGF ABCDEFG D把中序遍历的结果分成了ABC和EFG两部分,实际上,这就是D这个根的左 ...
- POJ 2255 Tree Recovery 二叉树恢复
一道和Leetcode的一道题目基本上一样的题目. 给出前序遍历和中序遍历序列,要求依据这些信息恢复一颗二叉树的原貌,然后按后序遍历序列输出. Leetcode上有给出后序和中序,恢复二叉树的. 只是 ...
- POJ 2255 Tree Recovery——二叉树的前序遍历、后序遍历、中序遍历规则(递归)
1.前序遍历的规则:(根左右) (1)访问根节点 (2)前序遍历左子树 (3)前序遍历右子树 对于图中二叉树,前序遍历结果:ABDECF 2.中序遍历的规则:(左根右) (1)中序遍历左子树 (2)访 ...
- poj 2255 Tree Recovery(求后序遍历,二叉树)
版权声明:本文为博主原创文章,未经博主同意不得转载.vasttian https://blog.csdn.net/u012860063/article/details/37699219 转载请注明出处 ...
- 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 树的遍历,分治 难度:0
http://poj.org/problem?id=2255 #include<cstdio> #include <cstring> using namespace std; ...
- Poj 2255 Tree Recovery(二叉搜索树)
题目链接:http://poj.org/problem?id=2255 思路分析:根据先序遍历(如DBACEGF)可以找出根结点(D),其后为左右子树:根据中序遍历(如ABCDEFG),已知根结点(D ...
- POJ 2255 Tree Recovery(根据前序遍历和中序遍历,输出后序遍历)
题意:给出一颗二叉树的前序遍历和中序遍历的序列,让你输出后序遍历的序列. 思路:见代码,采用递归. #include <iostream> #include <stdio.h> ...
随机推荐
- CORS:Source.priciple implimentation in Spring
Cors(Cross-origin Resource Sharing)一种跨域访问技术,基本思想是使用自定义的HTTP头部允许浏览器和服务器相互了解对方,从而决定响应成功与否. CORS与JSONP对 ...
- MongoDB学习day05--MongDB开启权限验证,创建用户
一.MongoDB账户权限配置 1.创建超级管理员用户 use admin db.createUser({ user:'admin', pwd:'123456', roles:[{role:'root ...
- jmeter的master远程运行和停止slave
jmeter可以部署成master-slave或者叫client-server模式,一个master(client)可以同时控制多个slave(server). 在linux系统下,master(cl ...
- Jupyter Notebook 基本使用
Jupyter 官网 IPython Interactive Computing IPython Notebook使用浏览器作为界面,向后台的IPython服务器发送请求,并显示结果.在浏览器的界面中 ...
- 跟着9张思维导图学JavaScript
思维导图小tips 思维导图又叫心智图,是表达发射性思维的有效的图形思维工具 ,它简单却又极其有效,是一种革命性的思维工具.思维导图运用图文并重的技巧,把各级主题的关系用相互隶属与相关的层级图表现出来 ...
- 一天教你入门struts2
写在前面 自己也是一个java和java web的菜鸟.之前没有接触过java web方面的开发 想通过一个小项目,来熟悉struts2的开发流程 一个有趣的想法源于教研室项目上的一个功能实现–自己主 ...
- jason数据格式 -- 扫盲
JSON是 JavaScript Object Notation的简称,是一种轻量的数据表示方法.jason格式採用key:value的方式记录数据,非常直观,比XML简洁,因而大受欢迎 介绍jaso ...
- APUE 线程 - 程序清单
APUE 线程 - 程序清单 程序清单11-1 打印线程ID #include "util.h" #include<pthread.h> pthread_t ntid; ...
- MongoDB 自己定义函数
定义 db.system.js.insert({ _id : "TestConcat", value : function TestConcat(s1, s2){ return s ...
- [IT学习]Python 小项目 通讯录 思路
建立一个通讯录查询软件,暂时只支持按姓名检索.出发点:无需登录企业门户,即可检索.要注意保护员工手机号,除非他自己同意显示. 欢迎您访问www.cnblogs.com/viphhs.转载请联系作者授权 ...