题目传送门。
设 \(f_n\) 表示有 \(n\) 个结点的二叉树的总数,\(g_n\) 表示在有 \(n\) 个结点的 \(f_n\) 棵二叉树中叶子的总数。那么答案就应为\(\frac{g_n}{f_n}\)。考虑怎么求。打表(link)发现 \(g_n=n\cdot f_{n-1}\)。
证明一下这个结论。假设现在有一棵 \(n\) 个结点构成的二叉树,树上有 \(k\) 个叶子。若把这 \(k\) 个叶子扔掉,就可以得到 \(k\) 棵不同的、由 \(n-1\) 个结点构成的二叉树。而每棵有 \(n-1\) 个结点的二叉树都可以找出 \(n\) 个空位来放置新的叶子(可以画图理解),换言之,每棵 \(n-1\) 个结点构成的二叉树都会被得到 \(n\) 次。于是就有 \(g_n=n\cdot f_{n-1}\)。
又由一些卡特兰数相关的前置知识(当然由上面打的表也可以猜出来),\(f_n=C_n=\frac{C_{2n}^n}{n+1}\)。回代化简,大力推柿子:
\[\begin{align*}
\frac{g_n}{f_n}&=\frac{n\cdot f_{n-1}}{f_n}\\
&=n\cdot f_{n-1}\cdot (f_n)^{-1}\\
&=n\cdot\frac{C_{2(n-1)}^{n-1}}{n}\cdot\frac{n+1}{C_{2n}^n}\\
&=\frac{C_{2n-2}^{n-1}\cdot(n+1)}{C_{2n}^n}\\
&=C_{2n-2}^{n-1}\cdot(n+1)\cdot(C_{2n}^n)^{-1}\\
&=\frac{(2n-2)!}{(n-1)!(n-1)!}\cdot\frac{(n+1)n!}{(2n)!}\\
&=\frac{1}{(n-1)!(n-1)!}\cdot\frac{(n+1)!n!}{2n(2n-1)}\\
&=\frac{1}{(n-1)!}\cdot\frac{(n+1)!n}{2n(2n-1)}\\
&=\frac{1}{(n-1)!}\cdot\frac{(n+1)!}{2(2n-1)}\\
&=\frac{n(n+1)}{2(2n-1)}
\end{align*}
\]
答案即为 \(\frac{n(n+1)}{2(2n-1)}\)。提交记录。
(补证一个问题:为什么二叉树同构数恰好是卡特兰数?)
考虑一棵二叉树的前、中序遍历序列。不难发现前者就是入栈序列,后者就是出栈序列。
若入栈序列固定,那按照卡特兰数的定义,出栈序列数就是卡特兰数。
又因为前、中序遍历合在一起即可确定一棵二叉树,所以二叉树同构数就是卡特兰数。