遍历问题
题目描述
我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:
所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。
输入格式
输A数据共两行,第一行表示该二叉树的前序遍历结果s1,第二行表示该二叉树的后序遍历结果s2。
输出格式
输出可能的中序遍历序列的总数,结果不超过长整型数。
输入 #1
abc
cba
输出 #1
4
一道结论题:
一条单链,也就是说只有一个儿子的结点组成链,前序遍历和后序一样
怎么判断它有几个那种链呢?前序为AB后序为BA的就是,我们只要暴力遍历一遍就行;
代码:
#include<bits/stdc++.h>
#define LL long long
#define pa pair<int,int>
#define lson k<<1
#define rson k<<1|1
#define N 500100
#define M 2000010
using namespace std;
string s1,s2;
int main(){
cin>>s1>>s2;
int ans=0;
for(int i=0;i<s1.length()-1;i++){//注意结束位置
for(int j=1;j<s2.length();j++){//注意起始位置
if(s1[i]==s2[j]&&s1[i+1]==s2[j-1]) ans++;
}
}
cout<<(1<<ans)<<endl;
return 0;
}