左神算法之二叉树的个数

目录

  • 1. 题目
  • 2. 解释
  • 3. 思路
  • 4. 代码
  • 5. 总结

1. 题目

给定节点个数,问,能返回多少个不同的二叉树

2. 解释

3. 思路

使用递归,当 n 是1 的时候,值是1, 当 n 是 2 的时候,值是 2
节点个数是左侧节点的变化 * 右侧节点的变化

4. 代码

public class Proble06_UniqueBST {

    public static int numTrees(int n) {
        int[] dp = new int[n + 1];
        dp[0] = 1;
        for (int i = 1; i <= n; i++) {
            for (int j = 0; j < i; j++) {
                dp[i] += dp[j] * dp[i - j - 1];
            }
        }
        return dp[n];
    }

    // 递归
    public static int process(int n) {
        if (n < 2) {
            return 1;
        }
        int ans = 0;
        for (int i = 0; i <= n - 1; i++) {
            int left = process(i);
            int right = process(n - 1 - i);
            ans += left * right;
        }
        return ans;
    }

    public static void main(String[] args) {
        int n = 5;
        System.out.println(numTrees(n));
        System.out.println(process(n));
    }
}

5. 总结

一个递归就好解决了吗,so easy

你可能感兴趣的:(左神算法,算法,java,开发语言)