1. 程式人生 > >已知二叉樹的後序歷遍和中序歷遍,求前序歷遍

已知二叉樹的後序歷遍和中序歷遍,求前序歷遍

給定一棵二叉樹的後序遍歷和中序遍歷,請你輸出其層序遍歷的序列。這裡假設鍵值都是互不相等的正整數。

輸入格式:

輸入第一行給出一個正整數N(≤30),是二叉樹中結點的個數。第二行給出其後序遍歷序列。第三行給出其中序遍歷序列。數字間以空格分隔。

輸出格式:

在一行中輸出該樹的層序遍歷的序列。數字間以1個空格分隔,行首尾不得有多餘空格。

輸入樣例:

7
2 3 1 5 7 6 4
1 2 3 4 5 6 7

#include <iostream>
#include <cstring>
#include <string>
using namespace
std; string a,b; void ans(string x,string y) { int l=x.length()-1; char z=x[l]; cout<<z<<endl; if(l==0) return; int l1=y.find(z),l2=y.length()-1; if(l1==0) { string x1=x.substr(0,l-1); string y1=y.substr(1,l-1); ans(x1,y1); } else
{ string x1=x.substr(0,l1),x2=x.substr(l1,l2-l1); string y1=y.substr(0,l1),y2=y.substr(l1+1,l2-l1); ans(x1,y1); ans(x2,y2); } } int main() { int n; while(cin>>n) { for(int i=0;i<n;i++) { char c; cin>>c; a+=c; } for
(int i=0;i<n;i++) { char c; cin>>c; b+=c; } ans(a,b); } return 0; }