n个节点能产生多少种二叉树
2016-02-09 00:31
232 查看
当n=0时,h(0)=1;
当n=1时,h(1)=1;
当n=2时,1个根节点固定,还有n-1=1个节点,可以作为左子树,也可以作为右子树,
即:h(2)=h(0)*h(1)+h(1)*h(0)=2;
当n=3时,1个根节点固定,还有n-1=2个节点,
即:h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=5;
当n>=2时,可组成的二叉树数量为 h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0)种
符合Catalan数的定义,可直接利用通项公式得出结果。
递归式:
h(n)=h(n-1)*(4*n-2)/(n+1);
该递推关系的解为:
h(n)=C(2n,n)/(n+1)=P(2n,n)/(n+1)!=(2n)!/(n!*(n+1)!) (n=1,2,3,...)
相似的问题还有 NOIP2003普及组 出栈序列统计
当n=1时,h(1)=1;
当n=2时,1个根节点固定,还有n-1=1个节点,可以作为左子树,也可以作为右子树,
即:h(2)=h(0)*h(1)+h(1)*h(0)=2;
当n=3时,1个根节点固定,还有n-1=2个节点,
即:h(3)=h(0)*h(2)+h(1)*h(1)+h(2)*h(0)=5;
当n>=2时,可组成的二叉树数量为 h(n)=h(0)*h(n-1)+h(1)*h(n-2)+...+h(n-1)*h(0)种
符合Catalan数的定义,可直接利用通项公式得出结果。
递归式:
h(n)=h(n-1)*(4*n-2)/(n+1);
该递推关系的解为:
h(n)=C(2n,n)/(n+1)=P(2n,n)/(n+1)!=(2n)!/(n!*(n+1)!) (n=1,2,3,...)
相似的问题还有 NOIP2003普及组 出栈序列统计
相关文章推荐
- [ShellExtension]属性页扩展-IShellPropSheetExt实现
- [MongoDB] Remove, update, create document
- J - A + B Problem II(第二季水)
- path classpath
- 引子
- 代码清单4-2
- Docker中使用多个volume-from的一个问题
- 快速掌握Lua 5.3 —— packages
- 51Nod 1083 矩阵取数问题(简单DP)
- 关于Context
- JacksonWant ——iOS系统学习笔记(一)
- 为GoLang增加aes的ECB模式支持
- 集训队专题(4)1001 King Arthur's Birthday Celebration
- CF624D - Array GCD
- 【JAVA】4、classpath属性的作用及使用方法
- 1020. 月饼 (25)
- 初学HTML 常见的标签(三) 插入类标签
- CF624C - Graph and String
- UE4使用Visual Studio编译配置详解
- android bitmap compress