题目
给定一个整数 n,生成所有由 1 ... n 为节点所组成的 二叉搜索树。
示例:
输入: 3输出:[[1,null,3,2],[3,2,null,1],[3,1,null,null,2],[2,1,3],[1,null,2,null,3]]解释:以上的输出对应以下 5 种不同结构的二叉搜索树:1 3 3 2 1\ / / / \ \3 2 1 1 3 2/ / \ \2 1 2 3
方案一
/*** Definition for a binary tree node.* type TreeNode struct {* Val int* Left *TreeNode* Right *TreeNode* }*/func generateTrees(n int) []*TreeNode {if n == 0 {return []*TreeNode{}}return helper(1, n)}func helper(start, end int) []*TreeNode {if start > end {return []*TreeNode{nil} // 这里必须返回 nil 数组}all_trees := []*TreeNode{}for i := start; i <= end; i++ {// 所有可能的左右子树left_trees := helper(start, i - 1)right_trees := helper(i + 1, end)for _, l := range left_trees {for _, r := range right_trees {all_trees = append(all_trees, &TreeNode{Val: i,Left: l,Right: r,})}}}return all_trees}
原文
https://leetcode-cn.com/explore/featured/card/recursion-i/260/conclusion/1233/
https://leetcode-cn.com/explore/featured/card/recursion-i/260/conclusion/1234/
