96. 不同的二叉搜索树-动态规划

Posted hequnwang10

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了96. 不同的二叉搜索树-动态规划相关的知识,希望对你有一定的参考价值。

一、题目描述

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

示例 1:

输入:n = 3
输出:5
示例 2:
输入:n = 1
输出:1

二、解题

动态规划

假设 n 个节点存在二叉排序树的个数是 G (n),令 f(i) 为以 i 为根的二叉搜索树的个数:
G(n)=f(1)+f(2)+f(3)+f(4)+…+f(n)

当 i 为根节点时,其左子树节点个数为 i-1 个,右子树节点为 n-i
f(i)=G(i−1)∗G(n−i)

综合两个公式可以得到 卡特兰数 公式
G(n)=G(0)∗G(n−1)+G(1)∗G(n−2)+…+G(n−1)∗G(0)

class Solution 
    public int numTrees(int n) 
        int[] G = new int[n+1];
        G[0] = 1;
        G[1] = 1;
        for(int i = 2;i<=n;i++)
            for(int j = 1;j<=i;j++)
                G[i] += G[j-1]*G[i-j]; 
            
        
        return G[n];
     

时间复杂度:O(n^2);

空间复杂度:O(n)。

数学

G(n)函数的值在数学上被称为卡塔兰数Cn。

class Solution 
    public int numTrees(int n) 
        // 提示:我们在这里需要用 long 类型防止计算过程中的溢出
        long C = 1;
        for (int i = 0; i < n; ++i) 
            C = C * 2 * (2 * i + 1) / (i + 2);
        
        return (int) C;
    

创作打卡挑战赛 赢取流量/现金/CSDN周边激励大奖

以上是关于96. 不同的二叉搜索树-动态规划的主要内容,如果未能解决你的问题,请参考以下文章

LeetCode 96.不同的二叉搜索树

leetcode中等96不同的二叉搜索树

96. 不同的二叉搜索树-动态规划-中等难度

LeetCode Java刷题笔记— 96. 不同的二叉搜索树

LeetCode Java刷题笔记— 96. 不同的二叉搜索树

LeetCode 96 不同的二叉搜索树[数学 动态规划] HERODING的LeetCode之路