令 \(cnt_T\) 表示二叉树 \(T\) 的叶子节点个数,\(f_n\) 表示有 \(n\) 个节点的二叉树个数,于是有:
令 \(g_n=\sum_{|V(T)=n|}cnt_T\),答案为 \(\frac{g_n}{f_n}\)。
对 \(f_n\),可以枚举左右子树的节点个数,有:
发现与卡特兰数的递推式相同。由卡特兰数通项公式得:
考虑如何求 \(g_n\)。这里给出结论:\(g_n=nf_{n-1}\),证明如下:
对于每一棵有 \(n\) 个节点的二叉树 \(T\),由于去掉它的任何一个叶子节点都能让它变成一棵有 \(n-1\) 个节点的二叉树 \(T'\),因此,数每棵 \(T\) 有多少个叶子节点,可以转化为数每棵 \(T'\) 有多少个位置能添加节点。
这里证明一下关于二叉树的两条性质。
令叶子节点数为 \(V_0\),有一个儿子的节点数为 \(V_1\),有两个儿子的节点数为 \(V_2\)
- 二叉树中,\(V_0=V_2+1\)。
对于 \(1\) 个节点的树,这是显然的。
考虑向一棵二叉树上添加节点得到新树。
如果在 \(V_0\) 下添加节点,那么 \(V_0\) 和 \(V_2\) 都不变;
如果在 \(V_1\) 下添加节点,那么 \(V_0\) 和 \(V_2\) 都 \(+1\)。
因此 \(V_0\) 和 \(V_2\) 的差始终为 \(1\)。
- 一棵有 \(n\) 个节点的二叉树,有 \(n+1\) 个位置能添加节点。
每个 \(V_0\) 下能添加两个节点,每个 \(V_1\) 下能添加一个节点,故共有 \(2V_0+V_1\) 个位置能添加节点。
由性质 \(1\) 可知,\(V_0=V_2+1\),又因为 \(V_0+V_1+V_2=n\),可解出 \(2V_0+V_1=n+1\)。
因此有 \(n+1\) 个位置能添加节点。
由性质 \(2\) 即可推出,\(g_n=nf_{n-1}\)。
将 \(f_n,g_n\) 代入前面的式子,推导后可得答案为: