根據二叉樹的後序遍歷以及中序遍歷還原二叉樹

2021-06-19 14:24:41 字數 1808 閱讀 3229

【題目】

假設一棵二叉樹的後序遍歷序列為 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確定 有左...

根據前序 中序 後序遍歷還原二叉樹

參考 首先我們得知道概念 前序遍歷 先訪問當前節點,再訪問當前節點的左子樹,最後訪問當前節點的右子樹。對於二叉樹,深度遍歷與此同。規律 根在前 子樹在根後且左子樹比右子樹靠前,且第乙個就是根節點 中序遍歷 先訪問當前節點的左子樹,然後訪問當前節點,最後是當前節點的右子樹,二叉樹,中序遍歷會得到資料公...