golang力扣leetcode 95.不同的二叉搜索树II

本文探讨了如何利用递归方法生成所有可能的不同二叉搜索树,并提供了详细的Go语言实现代码。通过对节点从1到n的遍历,递归地构建左右子树,最终形成完整的二叉搜索树集合。

95.不同的二叉搜索树II

95.不同的二叉搜索树II

95.不同的二叉搜索树II

题解

二叉搜索树就是左子树的值比根小,右子树比根。
这一题给出1-n,问节点1-n,问可以构造多少种不同的树,通过二叉搜索树的性质,可以把构造树变成构造左右子树,那么左右子树又可以继续递归。

代码

package main

type TreeNode struct {
	Val   int
	Left  *TreeNode
	Right *TreeNode
}

/**
 * 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 generate(1, n)
}
func generate(start, end int) []*TreeNode {
	if start > end {
		return []*TreeNode{nil}
	}
	var ans []*TreeNode
	for i := start; i <= end; i++ {
		left := generate(start, i-1)
		right := generate(i+1, end)
		for _, leftTree := range left {
			for _, rightTree := range right {
				root := &TreeNode{Val: i}
				root.Left = leftTree
				root.Right = rightTree
				ans = append(ans, root)
			}
		}
	}
	return ans
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cheems~

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值