题目:
给你一个整数 n ,请你生成并返回所有由 n 个节点组成且节点值从 1 到 n 互不相同的不同 二叉搜索树 **。可以按 任意顺序 返回答案。
题目链接
我的JavaScript解法
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {number} n
* @return {TreeNode[]}
*/
var generateTrees = function(n) {
if (n === 0) return new TreeNode();
return bulidBST(1, n);
};
const bulidBST = (low, high) => {
let result = []
if (low > high) {
result.push(null);
return result;
}
for (let i = low; i <= high; i++) {
let leftTrees = bulidBST(low, i - 1);
let rightTrees = bulidBST(i + 1, high);
for (let leftTree of leftTrees) {
for (let rightTree of rightTrees) {
let root = new TreeNode(i, leftTree, rightTree);
result.push(root);
}
}
}
return result;
}
解析: 建立二叉搜索树
- 时间复杂度:, 卡特兰数
- 空间复杂度: