题目大意
- 知道一个01串,作为一棵树的叶子
- 要求建立一棵FBI树,输出这棵树的后续遍历(左->右->根);
题目分析
解题思路:
- 用结构体作为节点的存储工具;
- 叶子作为搜索的边界;
- 先搜左边,再搜右边,回溯的时候输出根节点的信息。
代码:
//luogu1087:FBI树
//树的后序遍历
#include<bits/stdc++.h>
using namespace std;
int n;
char s[2005];
int dfs(int l,int r)
{
//边界条件
if(l==r)//到叶子了
{
if(s[l]=='0') { printf("B");return 0; }
if(s[l]=='1') { printf("I");return 1; }
}
//后序遍历
int x,y,m=(l+r)/2;
x=dfs(l,m);//1.左
y=dfs(m+1,r);//2.右
//3.根 (回溯的时候)
if(x+y==0) { printf("B");return 0; }//情况1
if(x+y==2) { printf("I");return 1; }//情况2
printf("F"); return 3;//情况3
}
int main()
{
scanf("%d",&n);
scanf("%s",s+1);
dfs(1,strlen(s+1));
return 0;
}