題目描述
輸入格式
輸出格式
題意翻譯
輸入一棵二叉樹的先序遍歷和中序遍歷序列,輸出它的後序遍歷序列。
輸入輸出樣例
輸入 #1複製
DBACEGF ABCDEFG BCAD CBAD
輸出 #1複製
ACBFGED CDAB
方法一:超時了
#include<bits/stdc++.h>
using namespace std;
string preorder;
string inorder;
void proorder(string pre,string in){
//結束條件
if(in.size()==0){//或者條件爲pre.size()==0
return;
}
int len=in.find(pre[0]);
proorder(pre.substr(1,len),in.substr(0,len));
proorder(pre.substr(len+1),in.substr(len+1));
cout<<pre[0];//沒有左子樹、也沒有右子樹了
}
int main(){
while(true){
cin>>preorder>>inorder;
proorder(preorder,inorder);
cout<<endl;
}
return 0;
}
方法二:
#include<bits/stdc++.h>
using namespace std;
string preorder,inorder;
void postorder(int l1,int l2,int n){
if(n<=0){
return;
}
int len=inorder.find(preorder[l1])-l2;
postorder(l1+1,l2,len);
postorder(l1+len+1,l2+len+1,n-len-1);
cout<<preorder[l1];
}
int main(){
while(cin>>preorder>>inorder){
int len=preorder.size();
//第一個參數爲:先序開始下標
//第二個參數爲:後續開始下標
//len爲節點數
postorder(0,0,len);
cout<<endl;
}
return 0;
}