劍指 Offer 07 重建二叉樹

2021-10-08 05:11:24 字數 1275 閱讀 2371

難度:中等

題目描述

解題思路

這道題之前做過,但是忘得乾乾淨淨了。。

現在再做一遍撿一撿,說不定哪次面試就出到了呢

總體思想就是遞迴,用雜湊表來儲存對應的中序遍歷的下標,空間換時間,免得每次都要去遍歷找下標。

然後每次遞迴的時候,要給對應的左子樹和右子樹在對應陣列裡的下標,左端點大於右端點的時候返回空。要注意下標的對應範圍,在前序和中序陣列裡左子樹和右子樹的長度是一樣的,可以計算出對應的下標。

/*

* 劍指 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...