51nod 1260 排列与二叉树

本文详细分析了51nod 1260题,涉及具有特定条件的二叉树及其与排列的关系。通过染色策略和最小表示法,探讨了不同排列的计数问题,并推导了生成函数及递推关系,提出使用广义二项式定理来O(n)计算特定项系数,解决实际问题。
摘要由CSDN通过智能技术生成

题意

考虑这样的二叉树:

  1. 每个内部节点同时有左儿子和右儿子
  2. 恰好有 n 个叶子

对任意满足上述条件的二叉树,我们按照中序遍历把每个叶子分别标上 1 ~ n ,接下来,你可以任意交换每个内部节点的左右子树。之后,中序遍历这棵树,把每个叶子的标号按照访问到它的时间写下来形成一个 1 ~ n 的排列。

求所有这样的二叉树经过任意交换后可以得到的不同的排列的个数。

约定: n106

初步分析

考虑任意一个符合条件的二叉树,我们把它的每个内部节点染上黑白两色之一,然后交换所有黑色节点的左右子树,就可以得到一个符合条件的排列。

这样不会重复计数?

废话这样当然会重复计数。。。

考虑如果存在两个相邻的节点被染上同一种颜色(自行脑补吧……)那么你可以像旋转平衡树一样把它们转一下,得到一个形态不同的二叉树,对这个新的二叉树按照染色进行变换,可以得到一个和原树变换后相同的排列。

但是这些方案你总不能不计吧?

考虑最小表示法的思想,我们规定每个点不能和它的左儿子(如果有的话)染上同样的颜色,否则的话可以把树“右旋”一下使得两个颜色相同的点变成父亲-右儿子的形式。这样就可以不重不漏的计数了。

证明了吗?

关于这个做法我脑补了一个长而且麻烦的证法…太啰嗦了这里写不下(害怕是错的被hack)。不过事实证明这样的方法是 work 的。

那么初步分析就完成了,我们有已经大概的思路辣!

推导

考虑二叉树的 n1 个内部节点,显然只有那些左孩子为叶子的点可以自由染色,其他点的颜色已经被限制了(要求和左孩子颜色相反),设有 m 个点的左孩子为叶子,那么对这个树染色有 2m 种方案。

考虑把所有叶子节点剥去,那么可以自由染色的点就是所有没有左孩子的点,我们设 hn 表示有 n 个节点的各种形态的二叉树的不同染色方案的和

hn 的递推关系与生成函数:

首先边界条件为 h0=1

枚举根节点的左右子树大小,可以得到这样的关系式(注意没有左孩子时候根节点可以自由染色):

hn=i=1n1hihni1+2hn1=i=0n1

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值