第三部分 數據結構 --樹-1364:二叉樹遍歷(flist)

1364:二叉樹遍歷(flist)

時間限制: 1000 ms 內存限制: 65536 KB

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

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

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

【輸出】
一行,表示二叉樹的先序序列。

【輸入樣例】
DBEAC
ABCDE
【輸出樣例】
ABDEC


思路:層次遍歷的結果都是根,在遍歷層次遍歷的時候,如果你遍歷左子樹,在左子樹第一次找到與層次遍歷相等的時候,那個就是根,然後遞歸輸出就可以了。

#include<cstdio>
#include<cstring>
#include<iostream>
using namespace std;
string s1,s2;
void f(int l1,int r1,int l2,int r2)//l1,r1 中序遍歷,l2,r2層次遍歷
{
	int i,j;
	for(i = l2;i <= r2;i++){//找層次遍歷中優先輸出根節點的位置 
		int t = 0;
		for(j = l1; j <= r1;j++){
			if(s2[i] == s1[j]){//輸出根節點 
				cout << s1[j];
				t = 1;
				break;
			}
		}
		if(t) break;
	}
	if(j > l1) f(l1,j-1,0,r2);//遍歷左子樹 
	if(j < r1) f(j+1,r1,0,r2);//遍歷右子樹
}
int main(){
	ios::sync_with_stdio(false);
	cin >> s1 >> s2;
	f(0,s1.size()-1,0,s2.size()-1);
	return 0;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章