《leetcode-go》不同的二叉搜索树 ii

给定一个值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
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值