LeetCode 96 - 不同的二叉搜索树 - [DP] 随笔

 

SRE实战 互联网时代守护先锋,助力企业售后服务体系运筹帷幄!一键直达领取阿里云限量特价优惠。

假定 $f[n]$ 表示有 $n$ 个节点的二叉树,有多少种不同结构。

因此 $f[n] = \sum_{i=0}^{n-1} (f[i] \times f[n-1-i])$,选一个节点作为根节点,那么剩下的 $n-1$ 个节点,分配到两棵子树。

 

AC代码:

class Solution
{
public:
    int numTrees(int n)
    {
        if(n<=0) return 0;
        if(n==1) return 1;
        int f[n+1];
        f[0]=f[1]=1;
        for(int i=2;i<=n;i++)
        {
            f[i]=0;
            for(int j=0;j<=i-1;j++)
            {
                int k=i-1-j;
                f[i]+=f[j]*f[k];
            }
        }
        return f[n];
    }
};

 

扫码关注我们
微信号:SRE实战
拒绝背锅 运筹帷幄