切換
舊版
前往
大廳
主題

ZeroJudge - d861: NOIP2001 3.求先序排列 解題心得

Not In My Back Yard | 2019-08-12 23:15:57 | 巴幣 0 | 人氣 367

題目連結:


題目大意:
給定一二元樹的中序以及後序探訪的排列,求此二元樹前序探訪的排列。

此樹的每個節點用相異的大寫字母標記,保證不超過八個節點。



範例輸入:
BADC
BDCA


範例輸出:
ABCD


解題思維:
先複習一下二元樹的前序、中序、後序探訪,它們的遞迴式依序是:
根節點 → 左子樹 → 右子樹 和
左子樹 → 根節點 → 右子樹 與
左子樹 → 右子樹 → 根節點

因此,我們可以看出後序排列的最後一個節點即是整棵樹的根節點。以範例測資為例,中序是 BADC 、後序是 BDCA ,因此:
A 是整棵樹的根節點、 B 是左子樹、 DC 是右子樹。
遞迴求左子樹得左子樹的根節點為 B ;
遞迴求右子樹得右子樹的根節點為 C 、 右子樹的左子樹為 D 。
遞迴求右子樹的左子樹得其根節點為 D 。

因此,前序探訪為 ABCD 。

此次分享到此為止,如有任何更加簡潔的想法或是有說明不清楚之地方,也煩請各位大大撥冗討論。

創作回應

更多創作