Vijos1132:求二叉树的先序序列
描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。
格式
输入格式
第一行为二叉树的中序序列
第二行为二叉树的后序序列
输出格式
一行,为二叉树的先序序列
BADC
BDCA
output:
ABCD
思路:先确定树根,再确定左子树与右子树的范围。
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN=;
char in_order[MAXN];
char post_order[MAXN];
char pre_order[MAXN];
void build(int l1,int r1,int l2,int r2)
{
if(l1>r1)
return ;
char root=post_order[r2];
int p=l1;
while(in_order[p]!=root) p++;
printf("%c",root);
int cnt=p-l1;
build(l1,p-,l2,l2+cnt-);//左子树
build(p+,r1,l2+cnt,r2-);//右子树
}
int main()
{
scanf("%s",in_order);
scanf("%s",post_order);
int len=strlen(in_order);
build(,len-,,len-);
return ;
}
下面是利用中序遍历与前序遍历求后序遍历
#include <cstdio>
#include <cstring>
using namespace std;
const int MAXN=;
char in_order[MAXN];
char pre_order[MAXN];
void build(int l1,int r1,int l2,int r2)
{
if(l1>r1||l2>r2)
return ;
char root=pre_order[l2];
int p=l1;
while(in_order[p]!=root) p++;
int cnt=p-l1;
build(l1,p-,l2+,l2+cnt);
build(p+,r1,l2+cnt+,r2);
printf("%c",root);
}
int main()
{
scanf("%s",in_order);
scanf("%s",pre_order);
int len=strlen(in_order);
build(,len-,,len-);
return ;
}
Vijos1132:求二叉树的先序序列的更多相关文章
- Vijos 1132 求二叉树的先序序列
描述 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度≤8). 格式 输入格式 第一行为二叉树的中序序列 第二行为二叉树的后序序列 输出格式 一行,为二叉树的先 ...
- 【递归】Vijos P1132 求二叉树的先序序列(NOIP2001普及组第三题)
题目链接: https://vijos.org/p/1132 题目大意: 给定二叉树的中序和后序遍历,求该二叉树先序遍历. 题目思路: [递归] 这题妥妥递归. 二叉树先序根左右,中序左根右,后序左右 ...
- hdu1710-Binary Tree Traversals (由二叉树的先序序列和中序序列求后序序列)
http://acm.hdu.edu.cn/showproblem.php?pid=1710 Binary Tree Traversals Time Limit: 1000/1000 MS (Java ...
- SDUT 1489 求二叉树的先序遍历 (中序后序还原二叉树)
求二叉树的先序遍历 Time Limit: 1000MS Memory Limit: 65536KB Submit Statistic Discuss Problem Description 已知一 ...
- SDUTOJ 1489 求二叉树的先序遍历
<img src="http://img.blog.csdn.net/20141014212549703?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi ...
- 数据结构实验之求二叉树后序遍历和层次遍历(SDUT 2137)
Problem Description 已知一棵二叉树的前序遍历和中序遍历,求二叉树的后序遍历和层序遍历. Input 输入数据有多组,第一行是一个整数t (t<1000),代表有t组测试数据. ...
- 分别求二叉树前、中、后序的第k个节点
一.求二叉树的前序遍历中的第k个节点 //求先序遍历中的第k个节点的值 ; elemType preNode(BTNode *root,int k){ if(root==NULL) return ' ...
- 给出 中序&后序 序列 建树;给出 先序&中序 序列 建树
已知 中序&后序 建立二叉树: SDUT 1489 Description 已知一棵二叉树的中序遍历和后序遍历,求二叉树的先序遍历 Input 输入数据有多组,第一行是一个整数t (t& ...
- [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历
Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...
随机推荐
- JavaScript系列问题
JavaScript系列问题: 0.javascript 基础教程[温故而知新一] 1.通过JS变更页面字体的大小 2.图片压缩优化能有效提高网站浏览速度
- 使用Erlang和Thrift,与Hbase通信(转)
操作系统是Ubuntu Server 12.10 先安装Thrift sudo apt-get install libboost-dev libboost-test-dev \ libboost-pr ...
- ASP.NET MVC 4 技术讲解
ASP.NET MVC 相关的社群与讨论区 Routing 与 ASP.NET MVC 生命周期 Model相关技术 Controller相关技术 View数据呈现相关技术 Area区域相关技术 AS ...
- 一个中断服务子程序ISR
请看下面的程序(一个中断服务子程序ISR),请指出这段代码的错误.)[中国台湾某著名CPU生产公司2005年面试题] 答案:(1)ISR不能返回一个值.如果你不懂这个,那么是不会被雇用的.(2)ISR ...
- GS踢玩家下线功能
GS踢玩家下线功能 //key:userId, val:nChannelId (当前在线用户) std::map<int, int> m_mapOnLineUserByUid; ///&l ...
- 九度OJ 1179:阶乘 (循环)
时间限制:1 秒 内存限制:32 兆 特殊判题:否 提交:5149 解决:1523 题目描述: 输入n, 求y1=1!+3!+...m!(m是小于等于n的最大奇数) y2=2!+4!+...p!(p是 ...
- 如何获取 Greenplum 中用户最后登录时间和登录频率
这几天搞系统迁移,老板突然想知道给客户开的那么多用户当中,哪些还在用,哪些已经不用了.我们的数据库是 Greenplum,而且还是一直没有升级的老版本,Google 了一下没有发现特别好的查看用户登录 ...
- 出版物排版软件——对XML数据进行排版、浏览、转换、打印
XML和XSL进行排版的功能强大的软件,并将排版结果进行打印或转换成各种各样的文件格式,满足各方需求. 随着出版物电子排版方式的普及,大部头出版物的排版,越来越多的应用在人们的工作中.比如,惠普公 ...
- JavaScript及jQuery学习小结
最近几天学习了很多关于JavaScript和jQuery的文章,稍作梳理后,总结如下. 1.jQuery入门系列 环境搭建 只需引用一个jQuery库文件,即可完成jQuery的环境搭建. 选择器 j ...
- 20145239 杜文超 实验四 Android开发基础
20145239实验四 Android开发基础 实验内容 基于Android Studio开发简单的Android应用并部署测试 了解Android组件.布局管理器的使用 掌握Android中事件处理 ...