测试的如果是题目给出的样例那只能说明数据里没有样例(
by _Remake_ @ 2022-03-19 17:20:36
是数据问题,看了别人提示,需要判断数据
```cpp
/* https://www.luogu.com.cn/problem/P1827 */
#include <cstdio>
char preOrder[26], inOrder[26];
// 中序遍历序列中根元素位置
int root(char c, int il, int ir) {
int r = il;
while (r <= ir && inOrder[r] != c)
r++;
return r;
}
void slove(int pl, int pr, int il, int ir) {
if (pl > pr || il > ir) return;
if (pl == pr) {
printf("%c", preOrder[pl]);
return;
}
char c = preOrder[pl];
int r = root(c, il, ir);
int ls = r - il, rs = ir - r; // 左右子树元素个数
slove(pl + 1, pl + ls, il, r - 1); // 左子树
slove(pl + ls + 1, pr, r + 1, ir); // 右子树
printf("%c", c);
}
int main() {
int n = 0;
char c;
while ((c = getchar()) != '\n')
if (c >= 'A' && c <= 'Z') // 必须判断,否则WA,题目数据有问题(坑)
inOrder[n++] = c;
for (int i = 0; i < n; i++)
scanf("%c", &preOrder[i]);
slove(0, n-1, 0, n-1);
return 0;
}
```
这样据可以了
by tgsalgo @ 2022-03-19 17:29:39