题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度\le 8≤8)。
输入格式
22行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
11行,表示一棵二叉树的先序。
输入输出样例
输入 #1复制
BADC BDCA
输出 #1复制
ABCD
说明/提示
【题目来源】
NOIP 2001 普及组第三题
代码如下:
这题不太会,对我这种菜鸡来说有点难度,代码参考题解 P1030 【求先序排列】 - NeosKnight 的博客 - 洛谷博客
//dfs深度优先搜索
#include<bits/stdc++.h>
using namespace std;
int len;
string s1 , s2 ;
/*
ACGDBHZKX
CDGAHXKZB
*/
void dfs(int ind1,int len1 ,int len2)
{
int index=s1.find(s2[len2]);
cout<<s2[len2];
if(index>ind1) dfs(ind1,index-1,len2-(len1-index)-1);
//ind1:中序左子树左边界;index-1:中序左子树右边界;ind2:无用;len2-(len1-index)-1:后序左子树右边界
if(index<len1) dfs(index+1,len1,len2-1);
//index+1:中序右子树左边界;len1:中序右子树右边界;ind2+index-ind1:;len2-1:后序右边界,下一输出结点
}
int main ()
{
cin>>s1>>s2;
len=s1.length();
dfs(0,len-1,len-1);
return 0;
}