求先序遍历

题目描述

给出一棵二叉树的中序与后序排列。求出它的先序排列。(约定树结点用不同的大写字母表示,长度<=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;
}
posted @ 2017-04-08 22:52  dustbin  阅读(289)  评论(0)    收藏  举报