Codevs 1029(遍历问题 )

题目链接:传送门

题目大意:根据题目给你的二叉树先序遍历,后序遍历,输出有多少种二叉树满足这两种遍历方式。

题目思路:

     首先我们要知道 先序遍历 是先遍历当前节点,然后遍历左子树,最后遍历右子树

               中序遍历 是先遍历节点的左子树,然后是当前节点,最后遍历右子树

             后序遍历 是先遍历左子树,再遍历右子树,最后遍历当前节点

             先序输出:           A B D G H E C K F I J           中序输出:           G D H B E A K C I J F           后序输出:           G H D E B K J I F C A

        然后对于这个题来说,        我们要知道如果一个节点既有左子树又有右子树,那么这个节点在前序遍历和后序遍历的结果中就确定了        也就是只有一种结构。        如果一个节点只有左子树或者只有右子树,那么这个节点和他唯一的儿子节点就有两种结构满足相同的前序遍历和后序遍历(如题干)                这个题目要我们求有多少种满足情况的二叉树,也就是让我们找有多少个节点只有一个子节点        那么我们怎么来处理?        这里再次用到前序遍历和后续遍历的性质:一个节点和它唯一的子节点在前序遍历和后序遍历中出现的位置刚好相反(也就是反串),我们只要找到了        一个反串,也就找到了一个只有一个子节点的节点,记录符合条件的节点数n,然后答案就是2^n
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <cstring>
#include <stack>
#include <cctype>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <climits>
#define lson root<<1,l,mid
#define rson root<<1|1,mid+1,r
#define fi first
#define se second
#define ping(x,y) ((x-y)*(x-y))
#define mst(x,y) memset(x,y,sizeof(x))
#define mcp(x,y) memcpy(x,y,sizeof(y))
using namespace std;
#define gamma 0.5772156649015328606065120
#define MOD 1000000007
#define inf 0x3f3f3f3f
#define N 2000005
#define maxn 100005
typedef pair<int,int> PII;
typedef long long LL;

int n,m,ans,dis[30],len;
char str1[30],str2[30];
int main(){

    int i,j,group,x,y,v,temp;
    scanf("%s",str1);
    scanf("%s",str2);
    len=strlen(str1);
    for(i=0;i<len;++i)dis[str2[i]-‘a‘]=i;
    LL ans=1;
    for(i=0;i<len-1;++i){
        int s1=str1[i]-‘a‘,s2=str1[i+1]-‘a‘;
        if(dis[s1]-dis[s2]==1)ans<<=1;
    }
    printf("%lld\n",ans);
    return 0;
}
 
时间: 2024-11-16 17:11:59

Codevs 1029(遍历问题 )的相关文章

二叉树结构 codevs 1029 遍历问题

codevs 1029 遍历问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 我们都很熟悉二叉树的前序.中序.后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历.然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树: 所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同.

1029 遍历问题

1029 遍历问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题解 查看运行结果 题目描述 Description 我们都很熟悉二叉树的前序.中序.后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历.然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树: 所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不

code vs 1029 遍历问题 区间dp

http://codevs.cn/problem/1029/ 给出一棵二叉树(节点是小写字符)的按照先序遍历和后续遍历得到的字符串,其实就是求有多少和二叉树的先序遍历和后序遍历满足这两个字符串.区间dp:dp(l, r, a, b)表示s字符串的(l, r)段和t字符串的(a, b)段相匹配的方案数.那么s[l]和t[b]必须一样,因为这两个是这一段的根节点.然后我们再枚举(l,r)的左子树(l+1,k)和(a,b)的左子树(a,a+k-l-1);dp(l,r,a,b) = sum(dp(l+1

Codevs 二叉树遍历问题 合集

2010 求后序遍历 时间限制: 1 s 空间限制: 64000 KB 题目等级 : 白银 Silver 题目描述 Description 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列. 输入描述 Input Description 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历. 输出描述 Output Description 仅一行,表示树的后序遍历序列. 样例输入 Sample Input abdehicfg dbheiafcg 样例输出 Samp

遍历问题 codevs

1029 遍历问题 1029 遍历问题 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 钻石 Diamond 题目描述 Description 我们都很熟悉二叉树的前序.中序.后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历.然而给定一棵二叉树的前序和后序,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树: 所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不

小结:动态规划

概要: 状态.转移:最优子结构.无后效性. 技巧及注意: dp就是纯经验+智商题 在dp方程写出来后,一定要考虑边界!不要以为转移对了就行了! 滚动数组的话一定要考虑好顺序! 下标有时候可以灵活使用!比如mod意义下的dp,倍数什么.可到达性等题目都可以这样做. 如果是线性序列的max{f[k]},k<i这种可以用线段树或bit维护成log 注意“前i”和“第i”的区别(特别对于答案更新),有时换一种就能解答出问题. 在状态加限制条件,如单调.地址等. 用下标来维护下标这个答案是否可达. 博弈论

codevs 1013 求先序排列(二叉树遍历)

传送门 Description 给出一棵二叉树的中序与后序排列.求出它的先序排列.(约定树结点用不同的大写字母表示,长度<=8). Input 两个字符串,分别是中序和后序(每行一个) Output 一个字符串,为二叉树的先序序列 Sample Input BADC BDCA Sample Output ABCD 思路 我们知道,前序遍历(PreOrder):根节点->左子树->右子树:中序遍历(InOrder):左子树->根节点->右子树:(PostOrder)后序遍历:左

3143 二叉树的序遍历——http://codevs.cn/problem/3143/

第一部分:题目 题目描述 Description 求一棵二叉树的前序遍历,中序遍历和后序遍历 输入描述 Input Description 第一行一个整数n,表示这棵树的节点个数. 接下来n行每行2个整数L和R.第i行的两个整数Li和Ri代表编号为i的节点的左儿子编号和右儿子编号. 输出描述 Output Description 输出一共三行,分别为前序遍历,中序遍历和后序遍历.编号之间用空格隔开. 样例输入 Sample Input 5 2 3 4 5 0 0 0 0 0 0 样例输出 Sam

codevs 2010 求后序遍历x

题目描述 Description 输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列. 输入描述 Input Description 共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历. 输出描述 Output Description 仅一行,表示树的后序遍历序列. 样例输入 Sample Input abdehicfg dbheiafcg 样例输出 Sample Output dhiebfgca 数据范围及提示 Data Size & Hint 输入长度不大于2