题目: [NOIP2004]FBI树 ,哈哈,我们今天来看一道经典的二叉树题嘛,这是选自NOIP上的一道题,好了,我们一起来看看题意吧:
题目描述是复制的,可能有部分显示不对,我就把题目链接放下面!
题目链接: [NOIP2004]FBI树
题目描述
输入描述
第一行是一个整数 N。
第二行是一个长度为 2N 的 01 串。
输出描述
包含一行,这一行只包含一个字符串,即 FBI 树的后序遍历序列。
示例1
输入
3
10001011
输出
IBFBBBFIBFIIIFF
思路
:
先放一张acwing y总画的图
这道题差不多就是个二叉树遍历的模板题,只是需要加点判断
具体的我们来看看代码吧!
我们来看看成功AC的代码吧:
#include<bits/stdc++.h> using namespace std; int n; string s; char deal(int l,int r){ if(l==r){//只有一个节点时 if(s[l]=='0'){cout<<'B'; return 'B';} else{ cout<<'I'; return 'I';} } int mid=(l+r)>>1; char a= deal(l,mid);//递归处理左子树 char b= deal(mid+1,r);//递归处理右子树 if(a==b){//判断是B还是I if(a=='B'){ cout<<'B';return 'B';} else if(a=='I') { cout<<'I';return 'I';} } cout<<'F'; return 'F'; } int main(){ cin>>n; cin>>s; deal(0,(1<<n)-1); return 0; }