Skip to content

不同的二叉搜索树

js
// 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
//
// 示例:
//
// 输入: 3
// 输出: 5

function fn(n) {
    // dp[i]代表i 可以构成dp[i]种二叉搜索树
    const 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]
            dp[i] += dp[j - 1] * dp[i - j]
        }
    }
    return dp[n]
}

console.log(fn(1))
console.log(fn(2))
console.log(fn(3))
// 给定一个整数 n,求以 1 ... n 为节点组成的二叉搜索树有多少种?
//
// 示例:
//
// 输入: 3
// 输出: 5

function fn(n) {
    // dp[i]代表i 可以构成dp[i]种二叉搜索树
    const 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]
            dp[i] += dp[j - 1] * dp[i - j]
        }
    }
    return dp[n]
}

console.log(fn(1))
console.log(fn(2))
console.log(fn(3))