算法——统计不同节点数量下搜索二叉树的情况数量

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

解题思路:利用动态规划的思想。从小到大遍历每个节点数量的情况。

  • 首先是状态标识,利用里一个数组,标识不同节点数量下的情况。
  • 然后是状态转移,在从头遍历到结尾,枚举每一个中间节点为根时的组合数量,再累加就是当前节点数量下的种类数量。
  • 以当前节点为根的组合情况,自然时左树的数量与右树的数量之积。
class Solution {
    public int numTrees(int n) {
        if(n == 0) return 0;

        int[] f = new int[n + 1];
        f[0] = 1;
        f[1] = 1;

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

        return f[n];
    }
}
原文地址:https://www.cnblogs.com/lippon/p/14117627.html