洛谷P1030求先序排列

时间:2022-12-17 17:43:57

题目描述

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

输入输出格式

输入格式:

 

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

 

输出格式:

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

 

输入输出样例

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

 

****深度优先搜索,首先我们要知道一点,后序排列的最后一个点就是根所以根据中序排列我们一点点去推根,从而得到前序排列

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<cmath>
 5 using namespace std;
 6 int i,j,l;
 7 char c[10],s[10];
 8 int find(char d)
 9 {
10     for(int i = 0;i <= l - 1;i++)
11     {
12         if(c[i] == d)
13         {
14             return i;
15          } 
16     }
17 }
18 void dfs(int t,int r,int b,int e)
19 {
20     int n = find(s[e]); 
21     printf("%c",s[e]);
22     if(n > t) //左子树 
23     dfs(t,n- 1,b,e - r + n - 1); //右子树的数量是r - n 
24     if(n < r) //右子树 
25     dfs(n + 1,r,b + n - t,e - 1); //左子树的数量n - t 
26 }
27 int main()
28 {
29     scanf("%s",c);
30     scanf("%s",s);
31     l = strlen(s);
32     dfs(0,l - 1,0,l - 1);
33     return 0;
34 }