Skip to content

Latest commit

 

History

History
39 lines (30 loc) · 900 Bytes

0096. 不同的二叉搜索树.java.md

File metadata and controls

39 lines (30 loc) · 900 Bytes

96. 不同的二叉搜索树

给你一个整数 n ,求恰由 n 个节点组成且节点值从 1 到 n 互不相同的 二叉搜索树 有多少种?返回满足题意的二叉搜索树的种数。

https://leetcode-cn.com/problems/unique-binary-search-trees/


从 i 到 j 的子树的数目和 i、j 无关,只和从 i 到 j 的元素的数量有关。

numTrees(n) = ∑ g(1, j - 1) * g(j + 1, n)
            = ∑ g(j - 1) * g(i - j)
class Solution {
    public int numTrees(int n) {
        if (n == 1) {
            return 1;
        } else if (n == 2) {
            return 2;
        }

        int[] N = new int [n + 1];
        N[0] = 1;
        N[1] = 1;
        N[2] = 2;

        for (int i = 3; i <= n; i++) {
            for (int j = 1; j <= i; j++) {
                N[i] += N[j - 1] * N[i - j];
            }
        }

        return N[n];
    }
}