8000 不同的二叉搜索树 · Issue #75 · louzhedong/blog · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content
不同的二叉搜索树 #75
Open
Open
@louzhedong

Description

@louzhedong

习题

出处:LeetCode 算法第96题

给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?

示例:

输入: 3
输出: 5
解释:
给定 n = 3, 一共有 5 种不同结构的二叉搜索树:

   1         3     3      2      1
    \       /     /      / \      \
     3     2     1      1   3      2
    /     /       \                 \
   2     1         2                 3

思路

采用动态规划的方法,因为固定个数的节点能组成的二叉搜索树是确定的,所有将n个数通过i分成左右子树,再将左右子树的值相乘即可,最后将所有i的情况相加,即为总的个数。如果不采用动态规划,会产生大量的重复计算,采用动态规划,通过空间换时间的方式,可以大大减少运算量

解答

/**
 * @param {number} n
 * @return {number}
 */
var numTrees = function (n) {
  var dp = new Array(n + 1).fill(undefined);
  dp[0] = 1;
  dp[1] = 1;
  dp[2] = 2;
  for (var i = 3; i <= n; i++) {
    var temp = 0;
    for (var j = 1; j <= i; j++) {
      temp += dp[j -1]*dp[i - j];
    }
    dp[i] = temp;
  }
 return dp[n];
};

console.log(numTrees(4));

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions

      0