HihoCoder 1049 後序遍歷(遞迴)

2021-08-04 12:28:32 字數 1543 閱讀 6826

time limit:10000 ms memory limit:262144 kb os:linux

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

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

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

小ho損失了心愛的玩具,正要嚎啕大哭起來,所幸被小hi發現了,勸說道:「別著急,這不是零件都還在麼?拼起來不就是了?」

「可是我忘記了二叉樹長什麼樣子了!」小ho沮喪道。

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

「這樣麼?!!」小ho止住了淚水,問道:「那要怎麼做呢?」

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

每個測試點(輸入檔案)有且僅有一組測試資料。

每組測試資料的第一行為乙個由大寫英文本母組成的字串,表示該二叉樹的前序遍歷的結果。

每組測試資料的第二行為乙個由大寫英文本母組成的字串,表示該二叉樹的中序遍歷的結果。

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

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

ab ba

ba如果我要求解post-order(str1, str2)的話,首先不難發現,根據『前序遍歷』str1=『根節點』+『左子樹的前序遍歷』+『右子樹的前序遍歷』,我可以知道這棵二叉樹的根節點root便是str1的第乙個字元!

而我在知道了『根節點』root之後,我便可以利用『中序遍歷』str2=『左子樹的中序遍歷』+『根節點』+『右子樹的中序遍歷』,求解出『左子樹的中序遍歷』str2l和『右子樹的中序遍歷』str2r!

接下來,由於一棵子樹的前序遍歷和中序遍歷的長度相同,那麼仍然是根據『前序遍歷』str1=『根節點』+『左子樹的前序遍歷』+『右子樹的前序遍歷』,我可以知道從str1的第2個字元開始的str2l.length()個字元便是『左子樹的前序遍歷』str1l,而這之後的部分便是『右子樹的前序遍歷』str1r!

只要根據之前求出的結果,和『後序遍歷』=『左子樹的後序遍歷』+『右子樹的後序遍歷』+『根節點』,便可以知道——post_order(str1, str2)=post_order(str1l, str2l)+post_order(str1r, str2r)+root

#include 

#include

using

namespace

std;

string post_order(string str1,string str2)

int main()

hihoCoder 1049 後序遍歷

1049 後序遍歷 時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述在參與過了美食節之後,小hi和小ho在別的地方又玩耍了一陣子,在這個過程中,小ho得到了乙個非常有意思的玩具 一棵由小球和木棍連線起來的二叉樹!小ho對這棵二叉樹愛不釋手,於是給它的每乙個節點都標記了乙...

hihoCoder 1049 後序遍歷

這裡參考了一位大神的 寫法很簡潔,思路其實就是這樣,學過先中後序遍歷的人,基本上都能看懂。每次進入遞迴程式之後,就找到根節點,然後把左子樹傳給遞迴程式,然後把右子樹傳給子遞迴程式,然後輸出這個根節點。include include using namespace std void post orde...

hihoCoder 1049 後序遍歷

time limit 10000ms case time limit 1000ms memory limit 256mb 描述 在參與過了美食節之後,小hi和小ho在別的地方又玩耍了一陣子,在這個過程中,小ho得到了乙個非常有意思的玩具 一棵由小球和木棍連線起來的二叉樹!小ho對這棵二叉樹愛不釋手,...