題目描述:
農夫約翰非常認真地對待他的奶牛們的血統。然而他不是乙個真正優秀的記帳員。他把他的奶牛們的家譜作成二叉樹,並且把二叉樹以更線性的「樹的中序遍歷」和「樹的前序遍歷」的符號加以記錄而不是用圖形的方法。 你的任務是在被給予奶牛家譜的「樹中序遍歷」和「樹前序遍歷」的符號後,建立奶牛家譜的「樹的後序遍歷」的符號。每一頭奶牛的姓名被譯為乙個唯一的字母。(你可能已經知道你可以在知道樹的兩種遍歷以後可以經常地重建這棵樹。)顯然,這裡的樹不會有多餘26個的頂點。這是在樣例輸入和樣例輸出中的樹的圖形表達方式:
c
/ \
/ \
b g
/ \ /
a d h
/ \e f
樹的中序遍歷是列印左子樹,根和右子樹;樹的前序遍歷是列印根,左子樹和右子樹;樹的後序遍歷是列印左子樹,右子樹和根。
輸入給出前序遍歷和中序遍歷,求出後序遍歷。
分析:演算法:很明顯的一題遞迴啊!
思路:這道題我們主要是根據二叉樹前/中/後遍歷來如說(具體怎樣遍歷題目上已經講解)。因為告訴我們兩種遍歷結果,所以我們的遞迴就可以從這兩種遞迴入手——用l,r,l1,r1來表示兩種遍歷方式所遞迴到的區間(左子樹或右子樹)。我們先尋找到所在子樹的根節點,再通過根節點來遞迴其對應的左右子樹,在找出其左右子樹對應的根節點,再遞迴其對應的左右子樹,在……
但這道題顯然不是讓我們求出這可樹原來的樣子,是求出後序遍歷。既然這樣,我們就得有乙個先後順序——因為後序遍歷是左右根,我們就需要遍歷左子樹,再遍歷右子樹,最後加上根節點。只有這樣才能求出後序遍歷。
那麼具體**如下:
#includeusing namespace std;
char tr[100001]={};
int a[201]={};
int n=0;
string s1,s2;
void dfs(int l,int r,int l1,int r1)//遞迴到頭,累加結點退出
for (int i=l;i<=r;i++)//尋找根節點
if (s1[i]==s2[l1])
}int main()
沒有題解的題解
考試要寫題解,可我不會寫,然後就變成了沒有題解的題解了 frist.評價 這是一道只考讀入的題。題面 n m的方陣,輸出被 包圍的 0 的個數。做法 讀入 本題難點 然後做一遍遍歷,將在方陣邊緣的0全部做一遍dfs遍歷將與其連成一塊的 0 全部變成 然後數一遍有幾個 0 就可以了。還在完善中,只能給...
題解 LibreOJ 6229 題解
題目鏈結 給定 n 求 f n sum n sum i frac i,j bmod 10 9 7 1 le n le 10 9 首先,這個求和範圍有些不爽,利用對稱性轉化一下得 f n frac 12 left n sum n sum n frac i,j right 然後推一下式子 begin s...
題解 CF1119H Tripe題解
題目傳送門 給出 n,t,x,y,z 值域 le 2 t 給出 n 個三元組 a i,b i,c i 表示有 x 個 a i y 個 b i z 個 c i 對於每個 k in 0,2 t 1 求出從每組選出乙個數的異或值為 k 的方案數。先定義 delta n f delta 表示多項式 f 的第...