给定一个值n,请生成所有的存储值1...n.的二叉搜索树(BST)的结构
例如:
给定n=3,你的程序应该给出下面五种不同的二叉搜索树(BST)
思路:跟前面一样,确定根节点,然后递归获取左右节点,不同的是需要输出树,要对每一个树的每一个位置都生成一个新的树节点,然后进行对应的子节点拼接。结束的位置就是如果没有数字了,就返回一个nil作为子节点。
package main
import . "nc_tools"
/*
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
/**
*
* @param n int整型
* @return TreeNode类一维数组
*/
func generateTrees(n int) []*TreeNode {
// write code here
return createTree(1, n)
}
func createTree(low int, high int) []*TreeNode {
var res []*TreeNode
if low > high {
res = append(res, nil)
return res
}
for i := low; i <= high; i++ {
left := createTree(low, i-1)
right := createTree(i+1, high)
for _, item1 := range left {
for _, item2 := range right {
node := new(TreeNode)
node.Val = i
node.Left = item1
node.Right = item2
res = append(res, node)
}
}
}
return res
}