根據(jù)前序和中序遍歷結(jié)果,構(gòu)建二叉樹
前序遍歷的第一個(gè)節(jié)點(diǎn),是數(shù)的根節(jié)點(diǎn)
從中序序列中找到根節(jié)點(diǎn),則左邊的都是左子樹,右邊的都是右子樹
然后遞歸處理
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 {
return nil
}
res.Left = buildTree(preorder[1:idx+1], inorder[:idx])
res.Right = buildTree(preorder[idx+1:], inorder[idx+1:])
return res
}