洛谷 P1087 :FBI樹
阿新 • • 發佈:2018-11-30
https://www.luogu.org/problemnew/show/P1087
輸入輸出樣例
輸入樣例#1: 複製
3 10001011
輸出樣例#1: 複製
IBFBBBFIBFIIIFF
在將b[j]置0點時候錯了幾次。
後序遍歷序列就是先左後右再訪問根節點
找出規律,從最小的也就是長度為1的節點開始訪問。
每訪問兩個相同長度的節點,就訪問他們的根節點。
#include<stdio.h> #include<string.h> #include<math.h> #define N 2020 char str[N]; int a[20],b[20]; int main() { int n,m,i,j; while(scanf("%d",&n)!=EOF) { memset(a,0,sizeof(a)); memset(b,0,sizeof(b)); scanf("%s",str); m=pow(2,n); for(i=0;i<m;i++) { if(str[i]=='0') { printf("B"); if(!a[1]) b[1]=1; } else { printf("I"); if(!a[1]) b[1]=2; } a[1]++; for(j=1;j<=n+2;j++) { if(a[j]==2) { a[j]=0; a[j+1]++; if(str[i]=='0'&&b[j]==1) { printf("B"); if(b[j+1]==0||b[j+1]==1) b[j+1]=1; else b[j+1]=3; } else if(str[i]=='1'&&b[j]==2) { printf("I"); if(b[j+1]==2||b[j+1]==0) b[j+1]=2; else b[j+1]=3; } else { printf("F"); b[j+1]=3; } b[j]=0; //重要 } } } printf("\n"); } return 0; }