輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。
例如輸入前序遍歷序列和中序遍歷序列
,則重建二叉樹並返回。
例如,給出
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
返回如下的二叉樹:
3
/ \9 20
/ \
15 7
故我們可以得出以下規律:
從前序遍歷中找到根節點root
在中序遍歷中查詢root的位置index,即可獲取左右子樹的長度
擷取左子樹的前序遍歷、右子樹的前序遍歷
擷取左子樹的中序遍歷、右子樹的中序遍歷
遞迴重建二叉樹 分別獲得左右子樹。
利用根節點和左右子樹即可重建二叉樹。
;// 分割前序遍歷
const preleft = pre.
slice(1
, index+1)
;const preright = pre.
slice
(index +1)
;//分割中序遍歷
const inorderleft = inorder.
slice(0
, index)
;const inorderright = inorder.
slice
(index +1)
;//分別求解左右子樹並生成二叉樹
const node =
newtreenode
(root)
; node.left =
reconstructbinarytree
(preleft, inorderleft)
; node.right =
reconstructbinarytree
(preright, inorderright)
;return node;
}?github筆記 :ruoruochen github
重建二叉數 劍指offer
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建出該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如輸入前序遍歷序列和中序遍歷序列,則重建二叉樹並返回。二叉樹四種基本的遍歷思想為 前序遍歷 根結點 左子樹 右子樹 中序遍歷 左子樹 根結點 右子樹 後序遍歷 左子樹 右子樹 根結點 層...
Leecode劍指 Offer 07 重建二叉樹
輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例如,給出 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 返回如下的二叉樹 3 9 20 15 7 限制 0 節點個數 5000 分析...
劍指offer07 重建二叉樹
這是乙個非常高頻的面試題。題目 輸入某二叉樹的前序遍歷和中序遍歷的結果,請重建該二叉樹。假設輸入的前序遍歷和中序遍歷的結果中都不含重複的數字。例子 前序遍歷 preorder 3,9,20,15,7 中序遍歷 inorder 9,3,15,20,7 思路 題目給出了前序和中序遍歷,我們可以知道前序的...