生成函数做法

前置:卡特兰数

记\(C_n\)为\(n\)个节点的二叉树的个数,\(C_0=1\),对于\(n \geq 1\),取一个根节点,枚举其左子树大小,有

\[C_n=\sum_{i=0}^{n-1}C_iC_{n-1-i}
\]

则卡特兰数的生成函数\(C\)满足

\[C(x)=C_0+xC^2(x)=1+xC^2(x),C_0=C(0)=1
\]

解方程得

\[C(x)=\frac{1-\sqrt{1-4x}}{2x}
\]

上面为什么不取正呢?考虑x=0,取负上下为等阶无穷小,值为1;取正上面是2下面是0,无意义。所以只能取负。

\[C(x)=\frac{1}{2x}\left( 1- \sum_{n=0}^{\infty}\binom{\frac{1}{2}}{n} (-4x)^n \right)=-\frac{1}{2}\sum_{n=0}^{\infty} \binom{\frac{1}{2}}{n+1}(-4)^{n+1}x^n
\]

\[C_n=-\frac{1}{2}\binom{\frac{1}{2}}{n+1}(-4)^{n+1}=2\frac{\prod_{i=0}^{n}(\frac{1}{2}-i)}{(n+1)!}(-1)^n 2^{2n}
\]

\[=\frac{(2n-1)!!}{(n+1)!}2^n=\frac{(2n)!}{n!n!(n+1)}=\frac{1}{n+1}\binom{2n}{n}
\]

分析

记\(h_n\)表示这\(C_n\)个二叉树的叶子数目之和,有\(h_0=0,h_1=1\)

对于\(n\geq 2\),枚举根的左儿子大小并由对称性,有

\[h_n=2\sum_{i=0}^{n-1}h_iC_{n-1-i}
\]

\[h(x)-h_0-h_1x=2xh(x)C(x)
\]

\[h(x)=2xh(x)C(x)+x
\]

根据\(C(x)=\frac{1-\sqrt{1-4x}}{2x}\),解得

\[h(x)=\frac{x}{\sqrt{1-4x}}
\]

\[h(x)=x\sum_{k=0}^{\infty}\binom{-\frac{1}{2}}{k}(-4x)^k
\]

\[h_n=\binom{-\frac{1}{2}}{n-1}(-1)^{n-1}2^{2(n-1)}=\frac{\prod_{i=0}^{n-2}(-\frac{1}{2}-i)}{(n-1)!}(-1)^{n-1}2^{2(n-1)}
\]

\[=\frac{(2n-3)!!}{(n-1)!}2^{n-1}=\frac{(2n-2)!}{(n-1)!(n-1)!}=\binom{2n-2}{n-1}
\]

那么期望值为

\[\frac{h_n}{C_n}=\frac{n(n+1)}{2(2n-1)}
\]

组合做法

对于一个叶子,可以用一个pair来描述:去掉该叶子后的二叉树,在该二叉树的哪个位置添加该叶子。

每个pair也对应了唯一的叶子。所以考虑计数这个pair

去掉该叶子的二叉树有N − 1个点,数目为CatalanN−1

对于一个N − 1个点的二叉树,考虑有多少个空位可以放。总共有2 × (N − 1)个空位,但是有N − 2个点已经占据了一个空位,所以有N个空位可以添加叶子

两个方案数相乘,再除以CatalanN,化简一下发现答案是 \(\frac{n(n+1)}{4n-2}\)。

最新文章

  1. Xamarin+Prism开发详解六:DependencyService与IPlatformInitializer的关系
  2. 修改Centos 6.5的yum源
  3. Spring学习记录(十一)---使用注解和自动装配
  4. supervisor centos安装
  5. Xcode添加代码块
  6. iOS开发中对RunLoop的个人心得
  7. [DeviceOne开发]-地区选择
  8. hdu-5714 拍照(二分)
  9. JDK1.7中调用javascript方法
  10. Cocos2d-x中背景音乐播放暂停与继续
  11. 2015年十大热门Android开源新项目
  12. 2017ecjtu-summer training #4 UESTC 1584
  13. 关于移动web教程免费发布
  14. [HNOI 2011]数学作业
  15. BZOJ.4793.[CERC2016]Hangar Hurdles(Kruskal重构树 BFS)
  16. e677. 模糊化图像
  17. spring aop博客记录
  18. maven配置编译器的版本
  19. elang和python互通的例子
  20. OO思想举例,控制翻转,依赖注入

热门文章

  1. leetCode 典型回溯例子
  2. 如何查看.java文件的字节码(原码)
  3. SQL-8 找出所有员工当前(to_date='9999-01-01')具体的薪水salary情况,对于相同的薪水只显示一次,并按照逆序显示
  4. L1-056 猜数字
  5. DevExpress v18.1新版亮点——Analytics Dashboard篇(一)
  6. C语言获取系统时间的几种方式
  7. SharePoint Framework 企业向导(七)
  8. L327 找灵魂伴侣
  9. L248 词汇题 2006
  10. 18-10-16 IE 快捷键的组合方式