95. 不同的二叉搜索树 II

202 阅读1分钟

95. 不同的二叉搜索树 II

类似于这道题

96. 不同的二叉搜索树 - 掘金 (juejin.cn)

  • 穷举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);
};