洛谷 P1030 求先序排列
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度≤8 \le 8≤8)。
输入输出格式
输入格式:
222行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式:
111行,表示一棵二叉树的先序。
输入输出样例
输入样例#1:
BADC BDCA
输出样例#1:
View Code
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 }