洛谷 P1030 求先序排列

题目描述

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

输入输出格式

输入格式:

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

输出格式:

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

输入输出样例

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


思路:后序排列最后一位即为先序第一位,再从中序中查找此位,此位前为左子树后为右子树
l1,r1为中序串的左右端点,l2,r2为逆序串的左右端点
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 string s1,s2;
 4 int len;
 5 void dfs(int l1,int r1,int l2,int r2){
 6     if(l1>r1)
 7     return ;
 8     else
 9     cout<<s2[r2];
10     for(int i=l1;i<=r1;i++){
11         if(s1[i]==s2[r2]){
12             dfs(l1,i-1,l2,l2+i-l1-1);
13             dfs(i+1,r1,i+l2-l1,r2-1);
14         }
15     }
16 }
17 int main(){
18     cin>>s1>>s2;
19     len=s1.size();
20     dfs(0,len-1,0,len-1);
21     return 0;
22 }
View Code

 

posted @ 2018-09-17 16:52  LittleBrotherZz  阅读(216)  评论(0)    收藏  举报