LeetCode 96. 不同的二叉搜索树(动态规划)

博客介绍了长度为n的序列组成的二叉搜索树总数的计算方法,即等于以每个数字为根节点形成的搜索树集合之和,且每个数字为根节点的搜索树之和等于左子树集合个数乘以右子树集合个数,还给出了相关代码。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述一个长度为n的序列组成的二叉搜索树总数等于以每个数字为根节点形成的搜索树的集合之和,而对于每个数字为根节点所形成的搜索树之和=左子树形成的集合个数*右子树形成的集合个数。而对于右子树形成的集合个数,若右子树序列长度为len,则就等于1到len形成的搜索树集合的个数,因为序列是递增。(举个例子,即1到5与6到10形成的搜索树个数相当)。所以g[n]为长度为n的序列形成的搜索树个数。

代码如下:

class Solution {
public:
    int g[10000];
    int numTrees(int n) {
        g[0]=1;//初始条件
        for(int i=1;i<=n;i++){ //1到i所组成的二叉搜索树个数,也即长度为n的序列组成的搜索树个数
            for(int j=1;j<=i;j++){ //以j为根节点
                g[i]+=g[j-1]*g[i-j]; //左子树个数*右子树个数
            }
        }
        return g[n];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值