题目传送门<==戳这
当我们知道先序序列和后序序列是不能够唯一确定中序序列的。
我们试想,当某个结点有两个儿子结点的时候,由先序序列和后序序列是可以唯一确定这部分的中序序列的。
而当某个结点仅有一个儿子结点的时候,该儿子结点可以是左儿子也可以是右儿子,两种情况。
因此,问题转化成计算这棵树仅含一个儿子结点的结点个数n,2^n即为最后答案。
而独生子结点在先序序列和后序序列中顺序是相反的,代码实现如下图 if 语句
上代码:
#include <iostream>
#include <cstdio>
using namespace std;
string pre,post;
int main(){
cin>>pre>>post; ==>前序,后序
long long ans=0; ==>独生子结点个数
int len1=pre.length();
int len2=post.length();
for(int i=0;i<len1;i++){
for(int j=0;j<len2;j++){
if(pre[i]==post[j] && pre[i+1]==post[j-1] && pre[i+1]>='a'&&pre[i+1]<='z'){
ans++;
}
}
}
cout<<(1<<ans);
}