首页 > 其他 > 详细

树的形态

时间:2021-07-29 16:00:14      阅读:20      评论:0      收藏:0      [点我收藏+]

树的形态

某一天,Zzq正在上数据结构课。老师在讲台上面讲着二叉树,zzq在下面发着呆。
突然zzq想到一个问题:对于一个n个节点,m个叶子的二叉树,有多少种形态呐?你能告诉他吗?
对于第一组样例(4,2)的解释
技术分享图片

思路:我们可以假设左子树有x个节点,y个叶子节点,那么右子树就有n-x-1个节点,m-y-1的叶子节点。
那么我们只要找到左子树的形态数目和右字数的形态数目,然后相乘就可以得到结果了。

#include<iostream>
using namespace std;
const int mod = 1e9+7;
typedef long long LL;
LL dp[55][55];
int main(void){
    dp[0][0]=1;
    dp[1][1]=1;
    for(int i=1;i<=50;i++){
        for(int j=1;j<=i;j++){
            for(int x=0;x<i;x++)
                for(int y=0;y<=j;y++)
                    dp[i][j]=(dp[i][j]+dp[x][y]*dp[i-x-1][j-y]%mod)%mod;
        }
    }
    int n,m;
    while(cin>>n>>m)
        cout<<dp[n][m]<<endl;
    return 0;

}

树的形态

原文:https://www.cnblogs.com/xvxing/p/15074525.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!