【动态规划】求二叉树的结构情况数

动态规划的思想,dp[i]表示有i个结点可以构成的二叉树结构情况数

遍历选取第j个结点作为根节点,则dp[n]+=dp[j-1]*dp[i-j]

class Solution {
public:
    int numTrees(int n) {
        if(n<0)
            return 0;
        int dp[2000]={0};
        dp[0]=1;
        dp[1]=1;
        for(int i=2;i<=n;i++) //结点总个数
        {
            for(int j=1;j<=n;j++) //选取第几个结点作为根结点
            {
                dp[i] += dp[j-1]*dp[i-j]; //dp[左子树个数]*dp[右子树个数]
            }
        }
        return dp[n];
    }
};

猜你喜欢

转载自blog.csdn.net/m0_38033475/article/details/92384106