类似于这道题
- 穷举root节点的所有可能。
- 递归构造出左右子树的所有合法 BST。
- 给root节点穷举所有左右子树的组合。
var generateTrees = function (n) {
if (n == 0) return [];
var arr = new Map();
var f = (i, j) => {
var res = [];
if (i > j) {
res.push(null);
return res;
}
var str = `${i}&${j}`;
if (arr.has(str)) return arr.get(str);
for (var k = i; k <= j; k++) {
var leftTree = f(i, k - 1);
var rightTree = f(k + 1, j);
for (var left of leftTree) {
for (var right of rightTree) {
res.push(new TreeNode(k, left, right));
}
}
}
arr.set(str, res);
return res;
};
return f(1, n);
};