1. 程式人生 > >二叉樹遍歷(已知中序和按層遍歷求先序 遞迴)

二叉樹遍歷(已知中序和按層遍歷求先序 遞迴)

二叉樹遍歷(flist)


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

【題目描述】

樹和二叉樹基本上都有先序、中序、後序、按層遍歷等遍歷順序,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。

假定一棵二叉樹一個結點用一個字元描述,現在給出中序和按層遍歷的字串,求該樹的先序遍歷字串。

【輸入】

兩行,每行是由字母組成的字串(一行的每個字元都是唯一的),分別表示二叉樹的中序遍歷和按層遍歷的序列。

【輸出】

一行,表示二叉樹的先序序列。

【輸入樣例】

DBEAC
ABCDE

【輸出樣例】

ABDEC

【來源】


No

提交 統計資訊

#include<iostream>
#include<cstring>
using namespace std;
string s1,s2;
void calc(int l1,int r1,int l2,int r2)
{
	int i,j;
	for(i=l2;i<=r2;i++)//找層次遍歷中優先輸出根節點的位置 
	{
		int b=0;
		for(j=l1;j<=r1;j++)
		{
			if(s2[i]==s1[j]) 
			{
				cout<<s1[j];//輸出根節點 
				b=1;
				break;
			}
		}
		if(b) break;
	}
	if(j>l1) calc(l1,j-1,0,r2);//遍歷左子樹 
	if(j<r1) calc(j+1,r1,0,r2);//遍歷右子樹 
}
int main()
{
	cin>>s1>>s2;
	calc(0,s1.length()-1,0,s2.length()-1);
	cout<<endl;
	return 0;
} 
這種題一般都要先確定好根節點的位置。然後才根據先序、中序、後序的規則進行遞迴。