最近面試總遇到這種根據給出的兩類序遍歷,然後求按另一種形式序的遍歷。看來有必要好好總結下這個知識點,省的每次筆試時都得花不少時間推導。
首先,我們看看前序、中序、後序遍歷的特性:
前序遍歷:(根—>左—>右)
1.訪問根節點
2.前序遍歷左子樹
3.前序遍歷右子樹
中序遍歷:(左—>根—>右
)1.中序遍歷左子樹
2.訪問根節點
3.中序遍歷右子樹
後序遍歷:(左—>右—>根
)1.後序遍歷左子樹
2.後序遍歷右子樹
3.訪問根節點
三序中知道其中兩個就可以推出第三個,但前提是我們必須知道中序(這裡是針對二叉樹的,不包括二叉搜尋樹).因為:先序和後序給我們提供的資訊是一樣的--告訴我們誰是根節點,中序則告訴我們左右子樹在哪兒。
例:已知先序為eacbdgf,中序為abcdefg,求後序。
由先序我們知道e為根節點,我們在中序中把左右子樹括起來 --(abcd)e(fg)
同樣對左子樹abcd進行分析,先序為acbd,中序為abcd.--a(bcd)
遞迴下去就可以了
後序為bdcafge
擴充套件:在2023年阿里實習生招聘試題中就有乙個問題:
下面關於二叉搜尋樹的是否正確?
給定一棵二叉搜尋樹的前序和後序遍歷結果,無法確定這棵二叉搜尋樹。
這個說法是錯誤的。
二叉樹(不是搜尋二叉樹),必須是中根加上先根或者後根就能構造出樹,但是,這裡面說了是二叉搜尋樹,已經暗含中根了
根據後序和中序輸出前序
本題要求根據給定的一棵二叉樹的後序遍歷和中序遍歷結果,輸出該樹的先序遍歷結果。第一行給出正整數n 30 是樹中結點的個數。隨後兩行,每行給出n個整數,分別對應後序遍歷和中序遍歷結果,數字間以空格分隔。題目保證輸入正確對應一棵二叉樹。在一行中輸出preorder 以及該樹的先序遍歷結果。數字間有1個空...
根據前序中序求後序
如前序 為 abdecgf 中序 為 bdacgef 先 根據前序第乙個節點 把中序分為bd和cgef兩部分,a為根節點,a左邊為左子樹,右邊為右子樹。再把左右子樹分別做上述步驟。以此類推 根據第二,第三.個節點構成二叉樹 a b e d c f g b 再根據後序的性質得到dbgcbfea 知道後...
前序中序後序
遍歷情況 前序 根結點 左子樹 右子樹 中序 左子樹 根結點 右子樹 後序 左子樹 右子樹 根結點 例題一 輸入描述 input description 輸入檔案共2行,第一行表示該樹的前序遍歷結果,第二行表示該樹的後序遍歷結果。輸入的字符集合為,長度不超過26。輸出描述 output descri...