LeetCode热题100道-Day08
func buildTree(preorder []int, inorder []int) *TreeNode {
n := len(preorder) - 1
return tra(preorder, inorder, 0, n, 0, n)
}
func tra(preorder, inorder []int, PL, PR, IL, IR int) *TreeNode {
if PL > PR {
return nil
}
gen := preorder[PL]
temp := 0
for i := IL; i <= IR; i++ {
if inorder[i] != gen {
temp++
} else {
break
}
}
resTemp := &TreeNode{}
resTemp.Val = gen
l := tra(preorder, inorder, PL+1, PL+temp, IL, IL+temp)
r := tra(preorder, inorder, PL+temp+1, PR, IL+temp+1, IR)
resTemp.Left = l
resTemp.Right = r
return resTemp
}
func numTrees(n int) int {
dp := make([]int, n+1)
dp[0] = 1
dp[1] = 1
for i:=2; i<=n; i++ {
for j:=1; j<=i; j++ {
if
dp[i] += dp[j-1]*dp[i-j]
}
}
return dp[n]
}