洛谷-UVA536 二叉樹重建 Tree Recovery

題目描述

PDF

輸入格式

輸出格式

題意翻譯

輸入一棵二叉樹的先序遍歷和中序遍歷序列,輸出它的後序遍歷序列。

輸入輸出樣例

輸入 #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;
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章