1. 程式人生 > >二叉樹遍歷(已知先序、中序求後序)

二叉樹遍歷(已知先序、中序求後序)

【例3-4】求後序遍歷


時間限制: 1000 ms         記憶體限制: 65536 KB
提交數: 11     通過數: 9 

【題目描述】

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

【輸入】

共兩行,第一行一個字串,表示樹的先序遍歷,第二行一個字串,表示樹的中序遍歷。樹的結點一律用小寫字母表示。

【輸出】

一行,表示樹的後序遍歷序列。

【輸入樣例】

abdec
dbeac

【輸出樣例】

debca

【來源】


No

提交 統計資訊


程式碼:

#include<iostream>
#include<cstring>
using namespace std;
string s1,s2;
void calc(int l1,int r1,int l2,int r2)
{
	int m=s2.find(s1[l1]);//找到根節點在中序遍歷中的位置 
	if(m>l2) calc(l1+1,m-l2+l1,l2,m-1);//遍歷左子樹 
	if(m<r2) calc(m-l2+l1+1,r1,m+1,r2);//遍歷右子樹 
	cout<<s1[l1];//輸出根節點 
}
int main()
{
	cin>>s1>>s2;
	calc(0,s1.length()-1,0,s2.length()-1);
	cout<<endl;
	return 0;
}