劍指offer07重建二叉樹題解

2021-10-10 04:33:18 字數 820 閱讀 9154

遞迴重構:

1.首先通過前序遍歷中的第一位,確定整個二叉樹的根root;

2.在中序遍歷中,root左邊的序列為左子樹,右邊的序列即為右子樹;

3.確定前序遍歷中的左右子樹序列;

4.*通過定義四個指標來確定左右子樹的起始位置;

5.*將左子樹和右子樹放入遞迴中,重複1~3;

6.左右子樹不再有節點時則返回null。

時間複雜度:o(n),每個節點都要經過建立及重建其左右節點;

空間複雜度:o(n),需要儲存整個二叉樹的空間。

/**

* definition for a binary tree node.

* struct treenode

* };

*/class solution

treenode * binarytree(

vector& preorder, vector& inorder,

int prestart, int preend, int instart,int inend

)root->left = binarytree(

preorder, inorder, prestart + 1, prestart + middle - instart, instart, middle - 1);

root->right = binarytree(

preorder, inorder, preend - (inend - middle) + 1, preend, middle + 1, inend);

return root;

}};

劍指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為右子...