hihoCoder#1049 : 後序遍歷

#1049 : 後序遍歷
時間限制:10000ms
單點時限:1000ms
內存限制:256MB
描述

在參與過了美食節之後,小Hi和小Ho在別的地方又玩耍了一陣子,在這個過程中,小Ho得到了一個非常有意思的玩具——一棵由小球和木棍連接起來的二叉樹!

小Ho對這棵二叉樹愛不釋手,於是給它的每一個節點都標記了一個標號——一個屬於A..Z的大寫字母,並且沒有任意兩個節點的標號是一樣的。小Hi也瞅準了這個機會,重新鞏固了一下小Ho關於二叉樹遍歷的基礎知識~就這樣,日子安穩的過了兩天。

這天,小Ho正好在求解這棵二叉樹的前序、中序和後序遍歷的結果,但是卻在求出前序遍歷和中序遍歷之後不小心把二叉樹摔到了地上,小球和木棍等零件散落了一地!

小Ho損失了心愛的玩具,正要嚎啕大哭起來,所幸被小Hi發現了,勸說道:“彆着急,這不是零件都還在麼?拼起來不就是了?”

“可是我忘記了二叉樹長什麼樣子了!”小Ho沮喪道。

“這個簡單,你不是剛剛求出了這棵二叉樹的前序和中序遍歷的結果麼,利用這兩個信息就可以還原出整棵二叉樹來哦!”

“這樣麼?!!”小Ho止住了淚水,問道:“那要怎麼做呢?”

沒錯!小Ho在這一週遇到的問題便是:給出一棵二叉樹的前序和中序遍歷的結果,還原這棵二叉樹並輸出其後序遍歷的結果。

提示:分而治之——化大爲小,化小爲無
輸入

每個測試點(輸入文件)有且僅有一組測試數據。

每組測試數據的第一行爲一個由大寫英文字母組成的字符串,表示該二叉樹的前序遍歷的結果。

每組測試數據的第二行爲一個由大寫英文字母組成的字符串,表示該二叉樹的中序遍歷的結果。

對於100%的數據,滿足二叉樹的節點數小於等於26。

輸出

對於每組測試數據,輸出一個由大寫英文字母組成的字符串,表示還原出的二叉樹的後序遍歷的結果。

樣例輸入
AB
BA
樣例輸出

BA


不經常用c++的string類,導致整個過程中出現了大量"/0"的字符串,處理的也非常麻煩,調試改錯了很久

代碼如下:


#include <iostream>
#include <string>
using namespace std;
string postOrder;
void post_order(string str1,string str2){
	if (str1[0] == NULL || str1[0] == '/0');
	else if (str1[1] == NULL || str1[1] == '/0')
		postOrder += str1[0];
	else
	{
		string str1L, str1R, str2L, str2R;
		int sign = 0;
		int count = 0;
		for (char ch : str2){
			if (ch == str1[0]){
				sign = 1;
			}
			else if (sign == 0){
				count++;
				str2L += ch;
			}
			else{
				str2R += ch;
			}
		}
		for (int i = 1; i <= str1.size(); i++){
			if (i <= count)
				str1L += str1[i];
			else
				str1R += str1[i];
		}
		if (str1L.size()!=0)
			post_order(str1L, str2L);
		if (str1R.size()!= 0)
			post_order(str1R, str2R);
		postOrder += str1[0];
	}
}

int main(){
	string str1;
	string str2;
	while (cin >> str1 >> str2)
	{
		post_order(str1, str2);
		cout << postOrder << endl;
		postOrder = "";
	}
}


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