NOIP 普及组初赛 · NOIP 2008 普及组初赛试题 第 26 题

阅读程序 · 答案 DBGEFCA · 考点:输入输出、位运算、分支结构、循环结构、字符串(string)

← 整套速查表 NOIP 普及组初赛 全部真题

题目

阅读程序写结果:

#include<iostream>
#include<cstring>
using namespace std;

#define MAX 100
void solve(char first[], int spos_f, int epos_f, char mid[], int spos_m, int epos_m)
{
	int i, root_m;
	if(spos_f > epos_f)
		return;
	for(i = spos_m; i <= epos_m; i++)
		if(first[spos_f] == mid[i])
		{
			root_m = i;
			break;
		}
	solve(first, spos_f + 1, spos_f + (root_m - spos_m), mid, spos_m, root_m - 1);
	solve(first, spos_f + (root_m - spos_m) + 1, epos_f, mid, root_m + 1, epos_m);
	cout << first[spos_f];
}

int main()
{
	char first[MAX], mid[MAX];
	int len;
	cin >> len;
	cin >> first >> mid;
	solve(first, 0, len - 1, mid , 0, len - 1);	
	cout << endl;
	return 0;
}

输入: 7 ABDCEGF BDAGECF

答案:DBGEFCA

考点

输入输出位运算 讲解 →位运算 真题汇总 →分支结构循环结构字符串(string)

解题思维

看到先序定根、中序分左右 → 先递归左、再递归右、最后输出根。

常见错误

易把后序误记为前序/中序;递归边界索引计算错,导致左右子树范围重叠或遗漏。

详细解析(节选)

考点:二叉树重建|后序遍历

程序在做什么

输入先序与中序序列,通过递归重建二叉树并后序遍历输出结果。

同考点真题

在 OI伴学 里做这道题
登录后可计时作答、查看完整六段式解析,并按你的错题自动生成同类练习。
去刷题先做一次 AI 学情诊断