第六周刷题随笔

1.洛谷P1111修复公路,忘记了M的大小才是排序的大小,搞成了N去了,虽然通过RE猜到了一丢丢,但是还是拖累了好久,洛谷高性能题是不是都是卡数据,只有减减枝才能过,嘤嘤嘤。

2.洛谷1087FBI树,这道题在递归的时候忘记了二分的规则,mid = (begin + end) / 2, 而不是end / 2,一定要切记,切记,切记,切记,切记。

3.洛谷1030求先序排列, 这道题记得后/先序排列的位置和中序不一样,因为每次后序要去掉最后一个,先序要去掉第一个,中序要去掉中间那个,所以先后中序递归时不能简简单单的找到中间位置i,然后,起始到i-1,i+1到末尾,而是应该在中序排列中记录从起始到i的个数,然后其他序列递归时要传起始以及起始加个数,而不是i-1的位置!!!!!

#include <stdio.h>
#include <string.h>
char mid[10], aft[10]; 
struct tree{
	char data;
	tree* left;
	tree* right;
}root;
tree* creat(int m_f, int m_l, int a_f, int a_l)
{
	if(m_f > m_l)
		return NULL;
	tree* root = new tree;
	root->data = aft[a_l];
	int i = m_f;
	while(mid[i] != aft[a_l])
		i++;
	root->left = creat(m_f, i - 1, a_f, a_f + (i - m_f) - 1);   //仔细推测为什么后序直接a_f到i - 1不行!!!
	root->right = creat(i + 1, m_l, a_f + (i - m_f), a_l - 1);
	return root;
}
void print(tree* root)
{
	if(root == NULL)
		return;
	printf("%c", root->data);
	print(root->left);
	print(root->right);
}
int main(void)
{
	scanf("%s", &mid);
	scanf("%s", &aft);
	int r = strlen(aft) - 1;
	tree* root = creat(0, r, 0, r);
	print(root);
	return 0;
}

4.洛谷P1305 新二叉树:新开在函数体内部的指针一定要先清零,否则未赋值并不是NULL;

posted @ 2019-10-12 21:17  funforever  阅读(108)  评论(0编辑  收藏  举报