已知二叉樹的前序遍歷,中序遍歷,求後序遍歷的問題。

2021-08-07 22:54:36 字數 1204 閱讀 6086

首先先說下二叉樹的結構吧,對於如下圖1所示的結構,a為根節點,b為左子樹,c 為右子樹。

圖1

現在開始切入正題,先解釋下二叉樹的前序遍歷,中序遍歷,和後序遍歷吧。

1. 前序遍歷:先遍歷根結點,然後遍歷左子樹,最後遍歷右子樹。

2.中序遍歷:先遍歷左子樹,然後遍歷根結點,最後遍歷右子樹。

3.後序遍歷:先遍歷左子樹,然後遍歷右子樹,最後遍歷根節點。

對於如下圖2所示,

圖2

圖2

前序遍歷

可以先這樣解釋,先對整個圖進行觀察如下所示,a為根節點,bdeg為左子樹,cf為右子樹,我們記得前序遍歷是先遍歷根節點a,然後再遍歷左邊的一整塊,而後再遍歷右邊的一整塊,左邊一整塊遍歷根據前序遍歷的原則,先遍歷b,再左子樹d,再d的左子樹,這裡並沒有,所以遍歷d的右子樹g,這是d及其子節點都遍歷完了,在遍歷b的右子樹e,這樣的話a節點的左子樹(也就是bdeg這一整塊)遍歷完事,目前得到的結果為

abdge,而後遍歷a的右子樹,先遍歷c,再遍歷c的左子樹(這裡沒有),再遍歷右子樹f,所以a的右子樹遍歷得到的結果為cf,這樣就得到了圖2整個前序遍歷的結果abdgecf

圖2

中序遍歷

為dgbeacf。

圖2後序遍歷為gdebfca。

這裡有個京東的測試題。

這題的答案為c,結果如下:

已知前序遍歷和中序遍歷求二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請輸出後序遍歷序列。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,重建二叉樹並返回後序遍歷序列 輸入某二叉樹的前序遍歷和中序遍歷的結果 輸出後序遍歷序列 1 2 4 7 3 5 6 8 4 7 2 1 5 3 8 6...

已知前序遍歷中序遍歷,求二叉樹的後序遍歷

陣列下標01 2345 67前序遍歷74 1653 82中序遍歷14 5678 32在二叉樹的前序遍歷中,第乙個數字總是樹的根節點的值。在中序遍歷中找到根節點,則根節點左邊的數字就是左子樹節點值,根節點右邊的數字就是右子樹節點值。使用遞迴的思想去分割左右子樹。在前序遍歷中,第乙個數字是7,是樹的根節...

已知二叉樹先序遍歷中序遍歷求後序遍歷

思路簡介 先序遍歷中第乙個字母即為根節點,在中序遍歷中找到根節點的位置 把中序遍歷的字串序列從根節點分成兩部分,左側一部分構建左子樹,右側一部分構建右子樹 在 的基礎上在先序遍歷中也找到構建左右子樹的部分 遞迴還原二叉樹 後序遍歷輸出即可 include include using namespac...