知識點:
前序遍歷列表:第乙個元素永遠是 【根節點 (root)】
中序遍歷列表:根節點 (root)【左邊】的所有元素都在根節點的【左分支】,【右邊】的所有元素都在根節點的【右分支】
演算法思路:
通過【前序遍歷列表】確定【根節點 (root)】
將【中序遍歷列表】的節點分割成【左分支節點】和【右分支節點】
遞迴尋找【左分支節點】中的【根節點 (left child)】和 【右分支節點】中的【根節點 (right child)】
class solution
treenode node = getroot(0,0,inorder.length-1); //根節點,左子樹的左邊界,右子樹的右邊界
return node;
}public treenode getroot(int root, int left, int right)
}
深入理解了中序列表的意義和遞迴引數的意義。
中序列表只是用來確定左子樹的長度(中序列表中根節點的下標-left)。為什麼要確定左子樹的長度呢?
因為當前節點的左兒子等於前序列表中它的下標加一,它的右兒子的下標等於它的下標+左子樹的長度+1,因此只要確定左子樹的長度就可以確定右兒子的下標。
遞迴結束條件為left > rigtht,不能取等,取等的話葉節點就被忽略了!
class
solution
return
getroot(0
,0, preorder.length -1)
;}public treenode getroot
(int root,
int left,
int right)
}
劍指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為右子...