已知某二叉树的先序和后序遍历,求有几种中序遍历的情况(有多少种二叉树的可能)
思路:
找左子树或者右子树在一边的情况,也就是二重循环遍历,先序遍历的序列从0到size()-2,后序从1到size-1,有先序的某值等于后序的某值,再进一步判断是否先序的后一个值等于后序当前值的前一个,则sum++。
最后二叉树的所有可能有sum^2种。
代码如下:
#include <iostream>
#include <string.h>
using namespace std;
int main()
{
long long int i,j,ans=1;
string a,b;
cin>>a>>b;
for(i=0;i<a.size()-1;i++)
{
for(j=1;j<b.size();j++)
{
if(a[i]==b[j]&&a[i+1]==b[j-1])
{
ans=ans*2;
}
}
}
cout<<ans<<endl;
return 0;
}