求先序遍历
题目描述
给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=8)。
输入输出格式
输入格式
2行,均为大写字母组成的字符串,表示一棵二叉树的中序与后序排列。
输出格式
1行,表示一棵二叉树的先序。
输入输出样例
输入样例
BADC
BDCA
输出样例
ABCD
题解
题目中给出了后序遍历,那么后序遍历的最后一个字母就是根结点
因为在中序遍历中根结点的左边就是左子树,右边就是右子树,所以可以计算出左子树的结点总数和右子树的节点总数,再用结点的总数将后序遍历中的结点分开,分开后就是两个子树的后序遍历。根据这个关系就可以写出一个递归函数
由于要输出先序遍历,所以就先输出每次找到的根节点,再进行递归
代码
#include<iostream>
#include<string>
using namespace std;
string s1,s2;
void search(int L1,int R1,int L2,int R2)
{
int pos=s1.find(s2[R2]);
cout<<s1[pos];
if(pos>L1)
search(L1,pos-1,L2,L2+pos-L1-1);
if(pos<R1)
search(pos+1,R1,L2+pos-L1,R2-1);
}
int main()
{
cin>>s1>>s2;
search(0,s1.length()-1,0,s2.length()-1);
cout<<endl;
return 0;
}

浙公网安备 33010602011771号