/** * Definition for a binary tree node. * type TreeNode struct { *     Val int *     Left *TreeNode *     Right *TreeNode * } */func generateTrees(n int) []*TreeNode {    if n <= 0 {        return nil    }    return create(1, n)}func create(start, end int) []*TreeNode {    if start > end {        return []*TreeNode{nil}    }    all_Trees := []*TreeNode{}    for i := start; i <= end; i++ {        left_Trees := create(start, i - 1)        right_Trees := create(i + 1, end)        for _, left := range(left_Trees) {            for _, right := range(right_Trees) {                curTree := &TreeNode{i, nil, nil}                 curTree.Left = left                curTree.Right = right                all_Trees = append(all_Trees, curTree)            }        }    }    return all_Trees}