劍指offer07 重建二叉樹

2021-10-10 23:30:35 字數 957 閱讀 9384

題目描述:

輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。

例如,給出:

前序遍歷 preorder = [3,9,20,15,7]

中序遍歷 inorder = [9,3,15,20,7]

返回如下二叉樹:

解題思路:

首先考慮先序遍歷,先序遍歷的順序是:中->左->右。因此中序陣列的第乙個數值肯定是二叉樹的根節點。再考慮中序遍歷,中序遍歷的順序是:左->中->右,因此查詢先序遍歷第乙個數值在中序陣列中的位置,如果是在中間,說明先序遍歷第乙個數字對應的節點有左子樹和右子樹。在最左邊,說明沒有左子樹,在最右邊說明沒有右子樹。按照這個想法進行遞迴。

**如下:

class

solution

void

buildwholetree

(treenode*

&p,vector<

int>

& preorder, vector<

int>

& inorder)

};

注:

1、vector本身沒有查詢函式,沒有v.find()查詢函式,而像map、unordered_map。有查詢m.find()。所以如果是想要查詢其中的某乙個值就需要使用find函式find(v.begin(),v.end(),x)。

2、當find函式查詢到某乙個值以後,返回迭代器it,it-v.begin(),表示他們之間差了多少,比如找到那個在第三個位置,res = 2;

3、v.erase和建構函式。想vector v1(v.begin(),v.end()+res)裡面只有兩個元素。同樣erase也只是刪除兩個元素。

劍指offer07 重建二叉樹

這是乙個非常高頻的面試題。題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例子 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 思路 題目給出了前序和中序遍歷,我們可以知道前序的...

劍指 Offer 07 重建二叉樹

難度 中等 題目描述 解題思路 這道題之前做過,但是忘得乾乾淨淨了。現在再做一遍撿一撿,說不定哪次面試就出到了呢 總體思想就是遞迴,用雜湊表來儲存對應的中序遍歷的下標,空間換時間,免得每次都要去遍歷找下標。然後每次遞迴的時候,要給對應的左子樹和右子樹在對應陣列裡的下標,左端點大於右端點的時候返回空。...

劍指 Offer 07 重建二叉樹

首先要懂得前序遍歷和中序遍歷,可以寫出兩個陣列,自己手動來重建一下二叉樹,來看看重建二叉樹是怎麼乙個流程。以圖中給出的二叉樹為例,根據前序遍歷的特點,可知前序遍歷的首尾數字是根節點,比如這個時候根節點數值為3,可以在中序遍歷中第2個位置找到數值3,在3左邊的9為3的左子樹,右邊的15,20,7為右子...