思路
这里要求是输出后序遍历,很明显用递归可以解决。
代码
#include<cstdio>
int n,f[15],b[10001];
char work(int q,int z){
char zuo,you;
if(q==z){
if(b[q] == 0) return 'B';
else return 'I';
}
zuo = work(q,(q+z)/2); //左子树
printf("%c",zuo);
you = work((q+z)/2+1,z); //右子树
printf("%c",you);
if(zuo=='F'||you=='F'||zuo!=you) return 'F';
else if(zuo=='B') return 'B';
else return 'I';
}
int main(){
scanf("%d",&n);
f[0] = 1; f[1] = 2; //计算2的几次方。
for(int i = 2; i <= n; ++i)
f[i] = f[i-1]*2;
for(int i = 1; i <= f[n]; ++i)
scanf("%1d",&b[i]);
printf("%c",work(1,f[n])); //输出
}