求助第二点WA,只有90分
查看原帖
求助第二点WA,只有90分
909068
sccogg楼主2023/7/18 13:58
#include<stdio.h>
#include<math.h>

char data[];
char tree[1050];
int len;

char judge(int fro, int end)
{
	int num0 = 0;
	int num1 = 0;
	for (int i = fro; i <= end; i++)
		if (data[i] == '0') num0++;
		else if (data[i] == '1') num1++;
	if (num0 && num1) return 'F';//F
	else if (!num0 && num1) return 'I';//I
	else if (num0 && !num1) return 'B';//B
}

void create(int node, int fro, int end)
{
	if (node >= len * 2) return;
	tree[node] = judge(fro, end);//构建根节点
	create(node * 2, fro, (fro + end) / 2);//创建左子树
	create(node * 2 + 1, (fro + end) / 2 + 1, end);//创建右子树
}

void lad(int node)//后序遍历
{
	if (tree[node] != '\0')
	{
		lad(node * 2);
		lad(node * 2 + 1);
		printf("%c", tree[node]);
	}
	return;
}

int main()
{
	int N;
	scanf("%d", &N);
	getchar();
  	getchar();
	len = (int)pow(2, N);
	for (int i = 1; i <= len; i++)
		scanf("%c", &data[i]);
	create(1, 1, len);
	lad(1);
	return 0;
}
2023/7/18 13:58
加载中...