一棵随机生成的 (n) 个结点的有根二叉树(所有互相不同构的形态等概率出现)的叶子节点数的期望。(n leq 10^9)
Solution
(n) 个点的二叉树个数即 Catalan 数 (f(n)=frac{C_{2n}^n}{n+1})
设 (g(n)) 为 (n) 个点的所有二叉树的叶子个数和,找规律得 (g(n)=nf(n-1))
Proof. 对于 (n) 个点,(k) 个叶子的二叉树,删掉任意一个叶子可以得到 (k) 个 (n-1) 个点的二叉树,这些二叉树每个有 (n) 个位置可以挂一个新的叶子
所求为
[frac{g_n}{f_n}=frac{nf_{n-1}}{f_n}=frac{n(n+1)}{2(2n-1)}
]
#include <bits/stdc++.h>
using namespace std;
double n;
signed main() {
cin>>n;
printf("%.10lf
",n*(n+1)/2/(2*n-1));
}