CodeVS 1013&1029
若干二叉树遍历的数据结构题。
Problem 1013
传送门:http://codevs.cn/problem/1013/
本题是一个数据结构——二叉树遍历问题。
对二叉树,给定中序遍历序列(In-order Traverse Sequence)和后序遍历序列(Post-order Traverse Sequence),求此二叉树的前序遍历序列(Pre-order Traverse Sequence)。
a.前序遍历:root->left sub-tree->right sub-tree;
b.中序遍历:left sub-tree->root->right sub-tree;
c.后序遍历:left sub-tree->right sub-tree->root;
于是,对于中序序列s与后序序列t,考虑分别将其分成三部分:根结点、左子树、右子树。设给定序列的长度为len,则root在后序序列t中的位置为len(后序序列中的最后一个位置为根结点)。设root在中序序列s中的位置为pos,则左子树的中序序列为s[1..pos-1],右子树的中序序列为s[pos+1..len]。于是,左子树的后序序列为t[1..pos-1],右子树的后序序列为t[pos..len-1]。递归地求解当前的根结点即可。
参考程序如下:
#include <bits/stdc++.h>
using namespace std; void dfs(string s, string t)
{
if (!s.length()) return;
//root
int len = s.length();
int pos = s.find(t.at(len - ));
printf("%c", t.at(len - ));
//left subtree
int l = pos;
dfs(s.substr(, l), t.substr(, l));
//right subtree
int r = len - pos - ;
dfs(s.substr(pos + , r), t.substr(pos, r));
} int main(void)
{
string s, t;
cin >> s >> t;
dfs(s, t);
return ;
}
Problem 1029
传送门:http://codevs.cn/problem/1029/
本题是一个数据结构——二叉树遍历问题。
对二叉树,给定前序遍历序列(Pre-order Traverse Sequence)和后序遍历序列(Post-order Traverse Sequence),求此二叉树的中序遍历序列(In-order Traverse Sequence)的所有可能情况数。
中序序列的不唯一性,来源于“无sibling的叶结点”。设前序序列和后序序列分别为s、t,设这个叶结点在s中的位置为i,在t中的位置为j,即s[i]==t[j]。由于这个结点无sibling,于是其parent在s中的位置为i-1,在t中的位置为j+1,即s[i-1]==t[j+1]。统计所有的“无sibling的叶结点”:cnt=card{(i,j)|1<i≤n,1≤j<n,s[i]=t[j],s[i-1]=t[j+1]}。则所有可能情况数为2cnt。
参考程序如下:
#include <stdio.h>
#include <string.h> int main(void)
{
char s[], t[];
scanf("%s%s", s, t);
int cnt = ;
for (int i = ; i < strlen(s); i++) {
for (int j = ; j < strlen(t) - ; j++) {
if (s[i] == t[j] && s[i - ] == t[j + ]) cnt++;
}
}
printf("%lld\n", 1LL << cnt);
return ;
}
CodeVS 1013&1029的更多相关文章
- codevs 1013 求先序排列
题目链接:http://codevs.cn/problem/1013/ 题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度< ...
- codevs——1013 求先序排列
1013 求先序排列 2001年NOIP全国联赛普及组 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 题目描述 Description 给出 ...
- codevs 1013 求先序排列(二叉树遍历)
传送门 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). Input 两个字符串,分别是中序和后序(每行一个) Outp ...
- codevs 1013 求先序排列 2001年NOIP全国联赛普及组 x
题目描述 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). 输入描述 Inpu ...
- 二叉树结构 codevs 1029 遍历问题
codevs 1029 遍历问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 我们都很熟悉二叉树的前序.中序.后序遍 ...
- codevs 1029 遍历问题
1029 遍历问题 http://codevs.cn/problem/1029/ 时间限制: 1 s 空间限制: 128000 KB 题目描述 Description 我们都很熟悉二叉树的 ...
- codevs http://www.codevs.cn/problem/?problemset_id=1 循环、递归、stl复习题
12.10高一练习题 1.要求: 这周回顾复习的内容是循环.递归.stl. 不要因为题目简单就放弃不做,现在就是练习基础. 2.练习题: (1)循环 题目解析与代码见随笔分类 NOI题库 htt ...
- T1013 求先序排列 codevs
http://codevs.cn/problem/1013/ 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题解 查看运行结果 题目描述 Descr ...
- codevs 3289 花匠
题目:codevs 3289 花匠 链接:http://codevs.cn/problem/3289/ 这道题有点像最长上升序列,但这里不是上升,是最长"波浪"子序列.用动态规划可 ...
随机推荐
- Oracle数据库软件标准版的一个限制:仅仅能用一个rman channel
Oracle数据库软件标准版的一个限制:仅仅能用一个rman channel Restrictions in "Standard Edition" Rman channel all ...
- 新手对ASP.NET MVC的疑惑
习惯了多年的WEB FORM开发方式,突然转向MVC,一下子懵了,晕头转向,好多不习惯,好多不明白,直到现在也没弄明白,只好先记下来,在应用中一一求解. 主要集中在视图(View)这里. 1.@Htm ...
- C# 文件的一些基本操作(转)//用C#读写ini配置文件
C# 文件的一些基本操作 2009-07-19 来自:博客园 字体大小:[大 中 小] 摘要:介绍C#对文件的一些基本操作,读写等. using System;using System.IO;us ...
- 联想Thinkpad L460安装Win7 64位
单位发了L460,自带的系统为win10,但是涉及到很多工作以及客户都是在win7环境下,所以必须安装win7的系统,经过一番折腾,终于装好了. 主要顺序如下: 1,制作WINPE启动盘,如大白菜,老 ...
- bzoj3211: 花神游历各国(线段树) 同codevs2492
3211: 花神游历各国 Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 3628 Solved: 1326[Submit][Status][Discu ...
- Django day07 (二)单表操作
单表操作 -mysql数据库:settings里配置: DATABASES = { 'default': { 'ENGINE': 'django.db.backends.sqlite3', 'NAME ...
- 【专题系列】单调队列优化DP
Tip:还有很多更有深度的题目,这里不再给出,只给了几道基本的题目(本来想继续更的,但是现在做的题目不是这一块内容,以后有空可能会继续补上) 单调队列——看起来就是很高级的玩意儿,显然是个队列,而且其 ...
- Android java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader......couldn't find "libweibosdkcore.so
java.lang.UnsatisfiedLinkError: dalvik.system.PathClassLoader[DexPathList[[zip file "/data/app/ ...
- Android引导页
源码地址:https://github.com/myloften/IntroSliderSample 博客地址:http://blog.csdn.net/loften_93663469/article ...
- JavaScript中字符串运算符的使用
字符串运算符是用于两个字符串型数据之间的运算符,它的作用是将两个字符串连接起来.在JavaScript中,可以使用+和+=运算符对两个字符串进行连接运算.其中,+运算符用于连接两个字符串,而+=运算符 ...