難度:中等
題目描述
解題思路
這道題之前做過,但是忘得乾乾淨淨了。。
現在再做一遍撿一撿,說不定哪次面試就出到了呢
總體思想就是遞迴,用雜湊表來儲存對應的中序遍歷的下標,空間換時間,免得每次都要去遍歷找下標。
然後每次遞迴的時候,要給對應的左子樹和右子樹在對應陣列裡的下標,左端點大於右端點的時候返回空。要注意下標的對應範圍,在前序和中序陣列裡左子樹和右子樹的長度是一樣的,可以計算出對應的下標。
/*
* 劍指 offer 07. 重建二叉樹
* 2020/7/17
*/public treenode buildtree
(int
preorder,
int[
] inorder)
return
buildhelper(0
,0, len-
1, preorder, indexmap);}
public treenode buildhelper
(int preleft,
int inleft,
int inright,
int[
] preorder,hashmap
indexmap)
int rootval = preorder[preleft]
;int index = indexmap.
get(rootval)
;//根節點在中序遍歷陣列中的位置
劍指offer07 重建二叉樹
這是乙個非常高頻的面試題。題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例子 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 思路 題目給出了前序和中序遍歷,我們可以知道前序的...
劍指 Offer 07 重建二叉樹
首先要懂得前序遍歷和中序遍歷,可以寫出兩個陣列,自己手動來重建一下二叉樹,來看看重建二叉樹是怎麼乙個流程。以圖中給出的二叉樹為例,根據前序遍歷的特點,可知前序遍歷的首尾數字是根節點,比如這個時候根節點數值為3,可以在中序遍歷中第2個位置找到數值3,在3左邊的9為3的左子樹,右邊的15,20,7為右子...
劍指 Offer 07 重建二叉樹
題目 給前序和中序二叉樹序列,建立二叉樹 資料都不重複 主方法宣告 public treenode buildtree int preorder,int inorder 思路 使用遞迴方法build private treenode build int preorder,int preorderst...