47 lines
746 B
Go
47 lines
746 B
Go
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
|
|
}
|