【題目】
假設一棵二叉樹的後序遍歷序列為 dgjhebifca ,中序遍歷序列為 dbgehjacif ,則其前序
遍歷序列為 ( ) 。
a. abcdefghij
b. abdeghjcfi
c. abdeghjfic
d. abdegjhcfi
由題,後序遍歷的最後乙個值為a,說明本二叉樹以節點a為根節點(當然,答案中第乙個節點都是a,也證明
了這一點)
下面給出整個分析過程
【第一步】
由後序遍歷的最後乙個節點可知本樹根節點為【a】
加上中序遍歷的結果,得知以【a】為根節點時,中序遍歷結果被【a】分為兩部分【dbgehj】【a】【cif】
於是作出第一幅圖如下
【第二步】
將已經確定了的節點從後序遍歷結果中分割出去
即【dgjhebifc】---【a】
此時,位於後序遍歷結果中的最後乙個值為【c】
說明節點【c】是某棵子樹的根節點
又由於【第一步】中【c】處於右子樹,因此得到,【c】是右子樹的根節點
於是回到中序遍歷結果【dbgehj】【a】【cif】中來,在【cif】中,由於【c】是根節點,所以【if】都是這
棵子樹的右子樹,【cif】子樹沒有左子樹,於是得到下圖
【第三步】
將已經確定了的節點從後序遍歷中分割出去
即【dgjhebif】---【ca】
此時,位於後序遍歷結果中的最後乙個值為【f】
說明節點【f】是某棵子樹的根節點
又由於【第二步】中【f】處於右子樹,因此得到,【f】是該右子樹的根節點
於是回到中序遍歷結果【dbgehj】【a】【c】【if】中來,在【if】中,由於【f】是根節點,所以【i】是【
if】這棵子樹的左子樹,於是得到下圖
【第四步】
將已經確定了的節點從後序遍歷中分割出去
即【dgjheb】---【ifca】
此時,位於後序遍歷結果中的最後乙個值為【b】
說明節點【b】是某棵子樹的根節點
又由於【第一步】中【b】處於【a】的左子樹,因此得到,【b】是該左子樹的根節點
於是回到中序遍歷結果【dbgehj】【a】【c】【f】【i】中來,根據【b】為根節點,可以將中序遍歷再次劃
分為【d】【b】【gehj】【a】【c】【f】【i】,於是得到下圖
【第五步】
將已經確定了的節點從後序遍歷中分割出去
即【dgjhe】---【bifca】
此時,位於後序遍歷結果中的最後乙個值為【e】
說明節點【e】是某棵子樹的根節點
又由於【第四步】中【e】處於【b】的右子樹,因此得到,【e】是該右子樹的根節點
於是回到中序遍歷結果【d】【b】【gehj】【a】【c】【f】【i】中來,根據【b】為根節點,可以將中序遍
歷再次劃分為
【d】【b】【g】【e】【hj】【a】【c】【f】【i】,於是得到下圖
【第六步】
將已經確定了的節點從後序遍歷中分割出去
即【dgjh】---【ebifca】
此時,位於後序遍歷結果中的最後乙個值為【h】
說明節點【h】是某棵子樹的根節點
又由於【第五步】中【h】處於【e】的右子樹,因此得到,【h】是該右子樹的根節點
於是回到中序遍歷結果【d】【b】【g】【e】【hj】【a】【c】【f】【i】中來,根據【h】為根節點,可以
將中序遍歷再次劃分為
【d】【b】【g】【e】【h】【j】【a】【c】【f】【i】,於是得到下圖
至此,整棵二叉樹已經還原
現在對該二叉樹進行前序遍歷便能得到我們想要的答案
【b】
根據二叉樹先序中序後序遍歷結果重建二叉樹 詳細解釋
c 二叉樹的建立 前中後序遍歷 以及遇到的坑 思路 1 二叉樹的先序遍歷的第乙個結點是根節點 2 中序遍歷的根節點左邊的序列是左子樹的結點,右邊的序列是右子樹的結點 3 左子樹和右子樹分別重複步驟1 2 步驟如下 這個無法給出正確的樹結構,因為先序 根左右 和後序 左右根 遍歷的左右孩子遍歷的順序一...
根據後序和中序遍歷重建二叉樹
思路 與已知前序遍歷的區別在於後序序列要從後向前的順序建立。因為前序遍歷根節點在其所有子樹的前面,而後序遍歷的根節點在其所有字數的後面。關鍵在每次讀取兩個陣列的範圍問題 1 in的邊界比較好確定 有左子樹時為 start2,i 1 有右子樹時為 i 1,end2 2 aft的邊界要根據in確定 有左...
根據前序 中序 後序遍歷還原二叉樹
參考 首先我們得知道概念 前序遍歷 先訪問當前節點,再訪問當前節點的左子樹,最後訪問當前節點的右子樹。對於二叉樹,深度遍歷與此同。規律 根在前 子樹在根後且左子樹比右子樹靠前,且第乙個就是根節點 中序遍歷 先訪問當前節點的左子樹,然後訪問當前節點,最後是當前節點的右子樹,二叉樹,中序遍歷會得到資料公...