package main
//import "fmt"
import . "nc_tools"
/*
 * type TreeNode struct {
 *   Val int
 *   Left *TreeNode
 *   Right *TreeNode
 * }
 */

/**
 * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
 *
 * 
 * @param n int整型 
 * @return TreeNode类一维数组
*/
func BSTgenerate( n int ) []*TreeNode {
    arr:=make([]int,n)
    for i,_:=range arr{
        arr[i]=i+1
    }
    var order func([]int)[]*TreeNode
    order=func(arr []int)[]*TreeNode{
        if len(arr)==0{
            return []*TreeNode{nil}
        }
        if len(arr)==1{
            return []*TreeNode{&TreeNode{Val:arr[0]}}
        }
        ans:=[]*TreeNode{}
        for i,x:=range arr{
            l:=order(arr[:i])
            r:=order(arr[i+1:])
            for _,p:=range l{
                for _,q:=range r{
                    ans=append(ans,&TreeNode{x,p,q})
                }
            }
        }
        return ans
    }
    return order(arr)
}