Skip to content

不同的二叉搜索树

题目详情

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

解题思路

dp[3]为例,

二叉搜索树

dp[3],就是 元素1为头结点搜索树的数量 + 元素2为头结点搜索树的数量 + 元素3为头结点搜索树的数量

元素1为头结点搜索树的数量 = 右子树有 2 个元素的搜索树数量 * 左子树有 0 个元素的搜索树数量

元素2为头结点搜索树的数量 = 右子树有 1 个元素的搜索树数量 * 左子树有 1 个元素的搜索树数量

元素3为头结点搜索树的数量 = 右子树有 0 个元素的搜索树数量 * 左子树有 2 个元素的搜索树数量

2个元素的搜索树数量就是dp[2]

1个元素的搜索树数量就是dp[1]

0个元素的搜索树数量就是dp[0]

所以 dp[3] = dp[2] _ dp[0] + dp[1] _ dp[1] + dp[0] * dp[2]

代码实现

js
var numTrees = function (n) {
  let dp = new Array(n + 1).fill(0);
  dp[0] = 1;
  for (let i = 1; i <= n; i++) {
    for (let j = 1; j <= i; j++) {
      dp[i] += dp[j - 1] * dp[i - j];
    }
  }

  return dp[n];
};

如有转载或 CV 的请标注本站原文地址