一、题目描述
C0164 [2001普及组-C]求先序排列
96.00%
提交人数:25
通过人数:24
(2020/1/23)
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8)。
输入描述
2 行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出描述
1 行,表示一棵二叉树的先序。
样例输入 1
BADC
BDCA
样例输出 1
ABCD
二、AC 代码
#include<cstdio>
#include<cstring>
#pragma warning(disable:4996)
char inorder[9], postorder[9];
void putpreorder(const char* inorder, const long long& li, const char* postorder, const long long& lp) {
const char* root = strchr(inorder, postorder[lp - 1]); putchar(*root);
long long l1 = root - inorder, l2 = inorder + lp - root - 1;
if (l1 != 0)putpreorder(inorder, l1, postorder, l1);
if (l2 != 0)putpreorder(root + 1, l2, postorder + l1, l2);
}
int main() {
scanf("%s%s", inorder, postorder);
putpreorder(inorder, strlen(inorder), postorder, strlen(postorder));
return 0;
}