【例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; }