题目:
对于一棵随机生成的 n 个结点的有根二叉树(所有互相不同构的形态等概率出现),求它的叶子节点数的期望是多少。
题解:
设 p(n) 表示有 n 个节点的二叉树的个数,显然 p(0)=1。
设 f(n)表示 n 个节点的二叉树叶子节点的个数,显然 f0=0,f1=1。
那么 ans=fipi。
- 对于 pi,由于左右的子树都是二叉树,所以枚举左右子树的点数:
pn=n−1∑i=0pipn−i−1
即卡特兰数,通项为 (2nn)n+1
- 对于 fi,枚举左右子树的大小,由 p 推出,且左右对称所以最后答案 ×2。
fn=2n−1∑i=0fi×pn−i−1
不妨设 A(x) 为 p 的生成函数,B(x)为 f 的生成函数。
易知
A(x)=xA2(x)+1,B(x)=2xA(x)B(x)+x
对于 A(x) 它的封闭形式为 1±√1−4x2x。(求根公式)
检验,易知 1+√1−4x2x 不行,舍去。
有 B(x)=x×(1−4x)−0.5
∴(xA(x))′=1√1−4x=B(x)x
对 xA(x)的每一项求导,
即 (n+1)pnxn,
=fn+1xn+1x=fn+1xn
∴fn+1=(n+1)pn
∴fn=pn−1
∴ans=n(n+1)2(2n−1)
本文作者:trsins
本文链接:https://www.cnblogs.com/trsins/p/15776596.html
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步