package main type TreeNode struct { Val int Left *TreeNode Right *TreeNode } func main() { } func buildTree(preorder []int, inorder []int) *TreeNode { var builder func(p []int, in []int) *TreeNode builder = func(p []int, in []int) *TreeNode { if len(in) == 0 || len(p) == 0 { return nil } rootnum := p[0] value := -1 for i := 0; i < len(in); i++ { if in[i] == rootnum { value = i } } var left []int var right []int if value != -1 { left = in[:value] right = in[value+1:] } else { return nil } tmp := &TreeNode{ Val: rootnum, Left: builder(p[1:1+len(left)], left), Right: builder(p[1+len(left):], right), } return tmp } res := builder(preorder, inorder) return res }