洛谷日记 Day 7 P1087 FBI树

我在这儿哟(溜~~)

个人见解

狗题!狗题!狗题!真的是坑!(好了,蒟蒻发泄完了。)

这题其实还是二叉树的后序遍历,但是蒟蒻的我拿到题是蒙的,什么FBI,要不要拨打911。唉难受。仔细看了下题,大概意思就是说给一个定长的0、1 1字符串,然后迭代切割一半,直到传长为1。其中全0的构成的树称为B树,全1构成的树称为I树,既有0又有1的树称为 F树。让输出这棵树的后序遍历结果。

我的做法其实也是蛮简单的,就是构造一个带字符型返回值的后序遍历函数,当前是什么类型的树就返回什么值,如B树就返回B,I树、F树同理。在构造到l==r的时候就判断当前是0串还是1串,0串就返回B1串就返回IF树通过在后序遍历中比较左右子树是否相等相等则输出并返回其中任意一个,不相等则直接输出并返回F

AC代码

#include
using namespace std;
const int MAXN=1024 + 10;//最大数据规模
char a[MAXN];
char postorder(int l,int r ) {
	if(r==l) {//左右结点位置相同,直接输出返回该结点的类型
		if(a[l]=='1') {
			cout<<"I";
			return 'I';
		} else if(a[l]=='0'){
			cout<<"B";
			return 'B';
		}
	}
	int k=(r+l)/2;//计算中值
	char c1=postorder(l,k);//遍历左子树并返回左子树的类型F B I
	char c2=postorder(k+1,r);//遍历右子树并返回右子树的类型F B I
	if(c1==c2){//c1与c2相等,直接输出并返回c1的值
		cout<>n;
	cin>>a+1;
	postorder(1,pow(2,n));//pow(2,n)与2^n同理
	return 0;
}

 

你可能感兴趣的:(算法,洛谷,2019集训,树,后序遍历二叉树,FBI树)