根據一棵樹的前序遍歷與中序遍歷構造二叉樹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 }
本文爲原創文章,轉載註明出處,歡迎掃碼關注公衆號
樓蘭
或者網站
https://lovecoding.club,第一時間看後續精彩文章,以爲好的話,順手分享到朋友圈吧,感謝支持。