前言
本章节聚焦算法题实战,通过两道经典题目系统讲解数据结构与算法核心模块。以题带点,讲解思路与代码实现,帮助大家快速提升代码能力。
一、美国血统 American Heritage
1.1 题目

1.2 算法原理
这道题本质上是根据先序和中序遍历序列重建二叉树。解法同《求先序序列》,关键在于手动模拟一下过程,找出「相同子问题」,利用「递归」求解。
具体步骤如下:
- 处理左右子树:确定当前根节点后,在中序序列中划分左右子树的范围。
- 找根节点:在先序序列的第一个元素即为当前子树的根。
- 划分左右子树:根据根节点在中序中的位置,递归处理左半部分和右半部分。
1.3 代码
#include <iostream>
using namespace std;
string a, b;
void dfs(int l1, int r1, int l2, int r2) {
// 递归窗口
if (l1 > r1) return;
// 寻找中序遍历中根节点的位置
int p = l1;
while (a[p] != b[l2]) p++;
// 递归处理左右子树
dfs(l1, p - 1, l2 + 1, l2 + p - l1); // 左子树
dfs(p + 1, r1, l2 + p - l1 + 1, r2); // 右子树
// 根节点
cout << b[l2];
}
{
cin >> a >> b;
(, a.() - , , b.() - );
;
}



