/**
* 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
}