【例3-4】求后序遍历
链接:http://ybt.ssoier.cn:8088/problem_show.php?pid=1339时间限制: 1000 ms 内存限制: 65536 KB
【题目描述】
输入一棵二叉树的先序和中序遍历序列,输出其后序遍历序列。
【输入】
共两行,第一行一个字符串,表示树的先序遍历,第二行一个字符串,表示树的中序遍历。树的结点一律用小写字母表示。
【输出】
一行,表示树的后序遍历序列。
【输入样例】
abdec dbeac
【输出样例】
debca
#include<iostream> #include<cstdio> #include<cstring> #include<vector> #include <algorithm> using namespace std; vector <char> pre,in,post; int i; void rec(int l,int r) { if(l>=r)return ; int m=distance(in.begin(),find(in.begin(), in.end(), pre[i++])); rec(l,m); rec(m+1,r); post.push_back(in[m]); } int main() { string s1,s2; cin>>s1>>s2; for(int i=0;i<s1.size();i++) pre.push_back(s1[i]); for(int i=0;i<s2.size();i++) in.push_back(s2[i]); rec(0,s1.size()); for(int i=0;i<post.size();i++) printf("%c",post[i]); cout<<endl; }