P1229
遍历问题
题目描述
我们都很熟悉二叉树的前序、中序、后序遍历,在数据结构中常提出这样的问题:已知一棵二叉树的前序和中序遍历,求它的后序遍历,相应的,已知一棵二叉树的后序遍历和中序遍历序列你也能求出它的前序遍历。然而给定一棵二叉树的前序和后序遍历,你却不能确定其中序遍历序列,考虑如下图中的几棵二叉树:

所有这些二叉树都有着相同的前序遍历和后序遍历,但中序遍历却不相同。
输入格式
输A数据共两行,第一行表示该二叉树的前序遍历结果s1,第二行表示该二叉树的后序遍历结果s2。
输出格式
输出可能的中序遍历序列的总数,结果不超过长整型数。
样例 #1
样例输入 #1
abc
cba
样例输出 #1
4
分析:由于只有一个儿子的节点中序遍历时才有两种可能
所以问题转化为找只有一个儿子节点的节点个数
找规律:(前序中出现AB,后序中出现BA,则这个节点只有一个儿子)
哎,数据结构的题还是要多做
点击查看代码
#include<bits/stdc++.h>
using namespace std;
#define int long long
string a,b;int len;
signed main()
{
ios::sync_with_stdio(false);
cin>>a>>b;
len=a.size();
a=" "+a,b=" "+b;
int tot=0;
for(int i=1;i<=len;i++)
for(int j=1;j<=len;j++)
if(a[i]==b[j]&&a[i+1]==b[j-1])
tot++;
cout<<(1<<tot)<<"\n";
return 0;
}
此生无悔入OI 来生AK IOI

浙公网安备 33010602011771号