根據一棵樹的前序遍歷與中序遍歷構造二叉樹node
注意:git
你能夠假設樹中沒有重複的元素。github
例如,給出golang
前序遍歷 preorder = [3,9,20,15,7]
中序遍歷 inorder = [9,3,15,20,7]
複製代碼
返回以下的二叉樹:面試
3
/ \
9 20
/ \
15 7
複製代碼
// 根據一棵樹的前序遍歷與中序遍歷構造二叉樹
// TreeNode Definition for a binary tree node.
type TreeNode struct {
Val int
Left *TreeNode
Right *TreeNode
}
func buildTree(preorder []int, inorder []int) *TreeNode {
if len(preorder) == 0 {
return nil
}
//前序遍歷的第一個節點即根節點
res := &TreeNode{
Val: preorder[0],
}
if len(preorder) == 1 {
return res
}
// 在中序遍歷中,根節點前面的即根節點的左子樹,後面的即右子樹
//匿名函數
idx := func(val int, nums []int) int {
for i, v := range nums {
if v == val {
return i
}
}
return -1
}(res.Val, inorder)
if idx == -1 {
panic("data error")
}
//遞歸,構建根節點左子樹和右子樹
res.Left = buildTree(preorder[1:idx+1], inorder[:idx])
res.Right = buildTree(preorder[idx+1:], inorder[idx+1:])
return res
}
複製代碼
本文爲原創文章,轉載註明出處,歡迎掃碼關注公衆號
樓蘭
或者網站lovecoding.club,第一時間看後續精彩文章,以爲好的話,順手分享到朋友圈吧,感謝支持。bash