4 重建二叉樹(劍指offer)

2021-10-10 23:16:03 字數 1103 閱讀 1539

4. 重建二叉樹

輸入某二叉樹的前序遍歷中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。

1、思路

通常樹有如下幾種遍歷方式:

前序遍歷:先訪問根結點,再訪問左子結點,最後訪問右子結點。(root一般在最前)

中序遍歷:先訪問左子結點,再訪問根結點,最後訪問右子結點。(root一般在中間)

後序遍歷:先訪問左子結點,再訪問右子結點,最後訪問根結點。(root一般在最後)

本題為前序遍歷和中序遍歷,最少需要兩種遍歷方式,才能重建二叉樹

前序遍歷序列中,第乙個數字總是樹的根結點的值。在中序遍歷序列中,根結點的值在序列的中間,左子樹的結點的值位於根結點的值的左邊,而右子樹的結點的值位於根結點的值的右邊。剩下的我們可以遞迴來實現,具體如圖:

用數學歸納法的思想就是,假設最後一步,就是root的左右子樹都已經重建好了,那麼我只要考慮將root的左右子樹安上去即可。

根據前序遍歷的性質,第乙個元素必然就是root,那麼下面的工作就是如何確定root的左右子樹的範圍。

根據中序遍歷的性質,root元素前面都是root的左子樹,後面都是root的右子樹。那麼我們只要找到中序遍歷中root的位置,就可以確定好左右子樹的範圍。                    正如上面所說,只需要將確定的左右子樹安到root上即可。遞迴要注意出口,假設最後只有乙個元素了,那麼就要返回。

# 輸入:[1,2,3,4,5,6,7],[3,2,4,1,6,5,7]。輸出:

劍指offer4 重建二叉樹

給出前序遍歷和中序遍歷,重新構建二叉樹.重建二叉樹主要就是遞迴,每一次新增乙個結點進入二叉樹,保證遞迴的順序和前序遍歷順序一致就ok了,多以左子樹的遞迴在前面,右子樹的遞迴放在後面,和前序遍歷的順序一致,第一次遞迴新增前序遍歷陣列中的第乙個,第二次遞迴新增的是前序遍歷陣列中的第二個.第n個就是陣列中...

劍指offer 4 重建二叉樹

題目描述 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。思路 中序序列中,節點左邊為左子樹,右邊為右子樹。前序第乙個為根節點 12 4 7 3 5 6 8 左 4 7 215 3...

劍指offer 4 重建二叉樹

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。演算法設計思想 前序遍歷序列的第乙個元素為根結點的值,然後在中序遍歷序列中尋找根節點的值的位置 索引 從中序遍歷序列的起始位置到根結...