题目描述
为了提高智商,ZJY 开始学习概率论。有一天,她想到了这样一个问题:对于一棵随机生成的 个结点的有根二叉树(所有互相不同构的形态等概率出现),它的叶子节点数的期望是多少呢?
判断两棵树是否同构的伪代码如下:
输入格式
输入一个正整数 ,表示有根树的结点数。
输出格式
输出这棵树期望的叶子节点数,要求误差小于 。
输入输出样例 #1
输入 #1
输出 #1
输入输出样例 #2
输入 #2
输出 #2
说明/提示
数据范围
对于 的数据,。
对于 的数据,。
对于 的数据,。
题解
令 表示 个点的二叉树个数; 表示 个点的所有 棵二叉树的叶节点总数。
打表如下:
n |
1 |
2 |
3 |
4 |
5 |
... |
|
1 |
2 |
5 |
14 |
42 |
... |
|
1 |
2 |
6 |
20 |
70 |
... |
发现规律:。证明很简单:
- 对于每棵 个点的二叉树,如果里面有 个叶节点,那么我们分别把这 个叶子删去会得到 棵 个点的二叉树;
- 而每棵 个点的二叉树恰好有 个位置可以悬挂一个新的叶子,所以每棵 个点的二叉树被得到了 次;
- 综上,我们即可得出结论:所有 个点的二叉树的叶子个数和等于 个点的二叉树个数 。
那么我们只需要求出 即可。而 的递推式可以通过枚举左子树结点个数得到:
边界是 。
该递推式显然是 Catalan 数列(其实一看那个 就应该知道,滑稽)。于是答案即为
代入卡特兰数的通项公式 很容易就得到上式等于 。