洛谷——P1030 求先序排列

https://www.luogu.org/problem/show?pid=1030#sub

题目描述

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。

输入输出格式

输入格式:

 

2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。

 

输出格式:

 

1行,表示一棵二叉树的先序。

 

输入输出样例

输入样例#1:
BADC
BDCA
输出样例#1:
ABCD

 1 #include <algorithm>
 2 #include <cstring>
 3 #include <cstdio>
 4 
 5 #define N 10015
 6 
 7 using namespace std;
 8 
 9 char midx[N],bhdx[N];
10 char midd[N],bhdd[N];
11 
12 void DFS(int l,int r,int L,int R)
13 {
14     printf("%c",bhdx[R]);
15     if(bhdd[R]>l) DFS(l,bhdd[R]-1,L,bhdd[R]-l+L-1);
16     if(bhdd[R]<r) DFS(bhdd[R]+1,r,R-(r-bhdd[R]),R-1);
17 }
18 
19 int main()
20 {
21     scanf("%s",midx);
22     scanf("%s",bhdx);
23     int n=strlen(midx);
24     for(int i=0;i<n;i++) midd[midx[i]]=i;
25     for(int i=0;i<n;i++) bhdd[i]=midd[bhdx[i]];
26     DFS(0,n-1,0,n-1);
27     return 0;
28 }

 

posted @ 2017-04-28 13:30  Aptal丶  阅读(256)  评论(0编辑  收藏  举报