Skip to content

Instantly share code, notes, and snippets.

@alldroll
Created February 5, 2020 08:45
Show Gist options
  • Save alldroll/de86aa6e660c59b6cb034bd05b7aeb10 to your computer and use it in GitHub Desktop.
Save alldroll/de86aa6e660c59b6cb034bd05b7aeb10 to your computer and use it in GitHub Desktop.
// https://leetcode.com/problems/unique-binary-search-trees-ii/
/**
* 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 generateTreesInRange(1, n)
}
func generateTreesInRange(min, max int) []*TreeNode {
var trees []*TreeNode
for val := min; val <= max; val++ {
leftSubTrees := generateTreesInRange(min, val - 1)
rightSubTrees := generateTreesInRange(val + 1, max)
for _, left := range leftSubTrees {
for _, right := range rightSubTrees {
trees = append(trees, &TreeNode{
Val: val,
Left: left,
Right: right,
})
}
}
}
if len(trees) == 0 {
trees = append(trees, nil)
}
return trees
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment