题解 | #有多少个不同的二叉搜索树#
有多少个不同的二叉搜索树
http://www.nowcoder.com/practice/16d23f940a084023b3be6019262589dc
1.思路
考虑表示第个节点作为根节点时所有二叉搜索树的可能,题目要求是求给定有多少种可能,即。
我们知道,,即第个节点为根节点时,左节点有个,右节点有个,即为左右节点所有二叉搜索树的可能的乘积。
现在结合两个式子,可以得出
2.代码实现
let n = ~~readline()
function main(n) {
const dp = new Array(n + 1).fill(0)
dp[0] = 1, dp[1] = 1
for(let i = 2 ; i <= n ; i++) {
for(let k = 1 ; k <= i ; k++) {
dp[i] += dp[k-1] * dp[i - k]
}
}
return dp[n]
}
console.log(main(n))