95. Unique Binary Search Trees II [JavaScript]

一、题目

  Given an integer n, generate all structurally unique BST’s (binary search trees) that store values 1 … n.

二、题目大意

  给定一个整数n,请给出由1~n序列组成的二叉搜索树的所有情况。

三、解题思路

  这道题与96 Unique Binary Search Trees不同点在于需要给出具体的子树,那么这道题目不能再采用动态规划的方式,可以采用递归的方式。

四、代码实现
var generateTrees = function(n) {

  return help(1, n)

  function help (min, max) {
    const result = []
    if (min > max) {
      return result
    }

    for (let mid = min; mid <= max; mid++) {
      // 得到左右子树
      const leftTree = help(min, mid - 1)
      const rightTree = help(mid + 1, max)

      const llen = leftTree.length
      const rlen = rightTree.length

      if (llen === 0 && rlen === 0) {
        // 左右子树为空的情况
        const root = new TreeNode(mid)
        result.push(root)
      } else if (llen === 0) {
        // 只有右子树的情况
        for (let i = 0; i < rlen; i++) {
          const root = new TreeNode(mid)
          root.right = rightTree[i]
          result.push(root)
        }
      } else if (rlen === 0) {
        // 只有左子树的情况
        for (let i = 0; i < llen; i++) {
          const root = new TreeNode(mid)
          root.left = leftTree[i]
          result.push(root)
        }
      } else {
        // 左右子树组合的情况
        for (let i = 0; i < llen; i++) {
          for (let j = 0; j < rlen; j++) {
            const root = new TreeNode(mid)
            root.left = leftTree[i]
            root.right = rightTree[j]
            result.push(root)
          }
        }
      }
    }

    return result
  }
}

  如果本文对您有帮助,欢迎关注微信公众号,为您推送更多大前端相关的内容, 欢迎留言讨论,ε=ε=ε=┏(゜ロ゜;)┛。

  您还可以在这些地方找到我:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值