leetcode第95题不同的二叉搜索树 II

154 阅读1分钟

题目: 给你一个整数 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;
}

解析: 建立二叉搜索树

  • 时间复杂度:O(nGn)O(nG_n)GnG_n 卡特兰数
  • 空间复杂度:O(nGn)O(nG_n)