题目
给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 **。可以按 任意顺序 返回答案。
示例1
输入:n = 3
输出:[[1,null,2,null,3],[1,null,3,2],[2,1,3],[3,1,null,null,2],[3,2,null,1]]
题解
递归
- 递归构建从[1,n]的二叉树
- 二叉树,所以对任意节点i位置二叉树将[1,n]分为两部分,left部分从[1,left-1] right部分从[right+1,n]
- 划分比较清楚,开始写代码
代码如下,注释很清晰:
代码
var generateTrees = function (n) {
if (n === 0) return []
return helper(1, n)
function helper(start, end) {
const path = []
if (start > end) return [null]
//1、 对任意i
for (let i = start; i <= end; i++) {
// 2、 构建i节点左侧树
const leftChild = helper(start, i - 1)
// 3、 构建i节点右侧树
const rightChilde = helper(i + 1, end)
// 4、 枚举左侧树,具体看7、这里得到的树数组,数组中方的树TreeNode节点
for (let left of leftChild) {
// 5、 枚举右侧树,
for (let right of rightChilde) {
// 6、 构建i节点,并将左右节点挂载在i节点
const root = new TreeNode(i)
root.left = left
root.right = right
path.push(root)
}
}
}
// 7、 返回数组
return path
}
}
结语
理解三句话,不解想半天;还是太菜