首页 > 试题广场 >

编写程序,求 n 个节点的二叉树有多少种形态。

[问答题]
编写程序,求 n 个节点的二叉树有多少种形态。
#include<stdio.h>
void main()
{
    long long f[];
    f[0]=1;
    f[1]=1;
    for(int i=2;i<n;i++)
        {
        f[i]=0;
        for(j=1;j<i;j++)
            {
                f[i]+=f[j-1]*f[i-j];
             }
                                                                                                                                                                                     [
        }
}

发表于 2019-07-26 11:14:34 回复(3)
利用数学定义计算卡特兰数

class Solution {
    public int numTrees(int n) {
        long C = 1;
        for(int i = 1; i < n; i++)
            C = C*2*(2*i + 1)/(i + 2);
        return (int)C;
    }
}


发表于 2020-10-26 10:06:24 回复(0)
#include <stdio.h>
#define N 51
int main()
{
    long long dp[N];
    int n;
    scanf("%d", &n);

    dp[0] = dp[1] = 1;
    for (int i = 2; i <= n; ++i)
    {
        dp[i] = 0;
        for (int j = 0; j <= i; ++j)
        {
            dp[i] += dp[j] * dp[i - j - 1];
        }
    }

    printf("%d\n", dp[n]);
    return 0;
}

编辑于 2019-12-30 22:48:25 回复(0)
def findBTkinds(n:int) -> int:
    if n == 0:
        outcome = 1
        return outcome
    elif n == 1:
        outcome = 1
        return outcome
    else:
        outcome = 2 *(2 * n - 1) / (n + 1) * findBTkinds(n-1)
        return outcome

发表于 2022-03-06 22:13:40 回复(0)
卡特兰
发表于 2019-11-14 23:59:25 回复(0)
#include<iostream>
using namespace std;
int DG(int n){
    if(n==1){
        return 1;
    }else{
        return n*DG(n-1);
    }
}
int main(){
    int n,f;
    cin>>n;
    f=DG(2*n)/(DG(n)*DG(n+1));
    cout>>f;
    return 0;
}

发表于 2019-10-04 21:07:07 回复(0)
catalan数转为f(n)=f(n-1)*[2*(2n-1)/(n+1)]
发表于 2019-09-12 10:41:35 回复(0)
(Cn 2n)/(n+1)
发表于 2019-09-07 15:26:18 回复(0)
Leetcode96
发表于 2019-07-30 18:21:47 回复(0)