二叉树数

Posted lja001162

tags:

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

二叉树数

Description

求由n个结点构成的不同的二叉树数.n<=100 每个节点均认为是等价的!

Input

输入一个整数n,表示结点数。

Output

输出对应的答案。

Sample Input

3

Sample Output

5

HINT

Source

#include <bits/stdc++.h>
using namespace std;
int f[101][1000];
int tmp[1000];
void mul(int *c,int *a,int *b)
{
    int l1=a[0],l2=b[0],l3;
    l3=l1+l2-1;
    for(int i=1;i<=l1;i++)
        for(int j=1;j<=l2;j++)
        {
            c[i+j-1]+=a[i]*b[j];
            c[i+j]+=c[i+j-1]/10;
            c[i+j-1]%=10;
        }
    while(c[l3+1]>0)
    {
        l3++;
        c[l3+1]+=c[l3]/10;
        c[l3]%=10;
    }
    c[0]=l3;        
}
void add(int *a,int *b)
{
    int l;
    if(a[0]>b[0]) l=a[0];
    else l=b[0];
    for(int i=1;i<=l;i++)
    {
        a[i]+=b[i];
        a[i+1]+=a[i]/10;
        a[i]%=10;
    }
    while(a[l+1]>0)
    {
        l++;
        a[l+1]+=a[l]/10;
        a[l]%=10;
    }
    a[0]=l;
}
int main()
{
    int n;
    memset(f,0,sizeof(f));
    cin>>n;
    f[0][0]=1,f[0][1]=1;
    f[1][0]=1,f[1][1]=1;
    for(int i=2;i<=n;i++)
    {
        f[i][0]=1,f[i][1]=0;
        for(int j=0;j<=i-1;j++)
        {
            memset(tmp,0,sizeof(tmp));
            mul(tmp,f[j],f[i-1-j]);
            add(f[i],tmp);
        }
    }
    for(int i= f[n][0];i>=1;i--)
    printf("%d", f[n][i]);
    return 0;
}

以上是关于二叉树数的主要内容,如果未能解决你的问题,请参考以下文章

数据结构与算法 3:二叉树,遍历,创建,释放,拷贝,求高度,面试,线索树

NC41 最长无重复子数组/NC133链表的奇偶重排/NC116把数字翻译成字符串/NC135 股票交易的最大收益/NC126换钱的最少货币数/NC45实现二叉树先序,中序和后序遍历(递归)(代码片段

北邮数据结构考研——平衡二叉树LR型失衡

数据结构 二叉树

数据结构二叉树经典基础习题

数据结构 二叉树的简单理解和代码实现