题目大意:
给你一个K叉树的前序遍历和后续遍历,问你K叉树可能的形状有多少种。
结题思路:
其实我也不是搞得很明白,模模糊糊的样子,看代码吧又好像是那么回事。。。。
#include<stdio.h>
#include <string.h>
#define N 30
int C[N][N];
char pre[N],post[N];
int n,m,root,ans;
void Com()
{
memset(C,0,sizeof(C));
for(int i=0;i<N;i++)
{
C[i][0] = 1;
}
for(int i=1;i<N;i++)
{
for(int j=1;j<=i;j++)
{
C[i][j] = C[i-1][j-1] + C[i-1][j];
}
}
return;
}
void dfs(int st,int ed)
{
int i,son=0;
for(i=st;i<=ed;i++)
{
if(post[i]==pre[root])
{
++son;
++root;
dfs(st,i-1);
st=i+1;
}
}
ans*=C[m][son];
}
int main()
{
Com();
while(scanf("%d",&m) && m)
{
scanf("%s %s",pre,post);
n = strlen(pre);
root=1;
ans=1;
dfs(0,n-2);
printf("%d\n",ans);
}
return 0;
}