poj 1095 二叉树的编号


/*
 *  poj 1095 二叉树编号

    题目大意:
    
        二叉树按照如下规则进行编号:

            1、0个节点的空树编号为0
            
            2、单个节点的树编号为1

            3、任意包含m个节点的二叉树,其编号必然小于任意一个包含m+1个节点的二叉树

            4、包含相同节点的二叉树,左子树如果相同,大小取决于右子树的大小比较,如果
               左子树不同,则大的编号较大。公式如下:

                               |-- n(L(T1)) > n(L(T2))
               n(T1) > n(T2) --|
                               |-- n(L(T1))= n(L(T2)) && n(R(T1)) > n(R(T2))

            求给定序号的二叉树打印.

        数学模型:
            令f(m)表示包含m个节点的二叉树的个数,则有如下公式成立:

                f(m) = sum{f(k)*f(m-1-k) | k->0~m-1}

        解题思路:
            本题与poj 1019数列问题有点象,同样是打印出序号为n的元素。解法也类似

            1、根据上面求出的f(m)数组,可以判断出给定的序号为n的二叉树包含的节点个数

            2、然后枚举右子树的元素个数(从m-1到0),找出左右子树的元素个数

            3、
            
*/
#include <stdio.h>

#define M_MAX 18

unsigned int f[M_MAX+1];

/*
    打印包含m个节点的,
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值