试求N个节点所能组成的二叉树的个数以及求解方法
来源:互联网 发布:js 验证码倒计时 编辑:程序博客网 时间:2024/05/22 10:31
定义f(0)= 1
当只有一个节点时,只会生成一种类型的二叉树,记做f(1)= 1
当有两个节点时,首先固定一个节点(即固定根节点),剩下一个节点可以排放的位置为1= 1+0 = 0+1[即左边一个节点右边0个节点或者左边0个节点右边1个节点]记做f(2)= f(1)*f(0) + f{0}*f(1) = 2
当有三个节点,首先固定根基点,剩下3-1=2个节点的安放位置:2= 2*0 + 1*1 + 0*2 记做f(3)= f(2)*f(0) + f(1)*f(1) + f(0)*f(2) = 2 + 1 + 2 = 5
…
当有n个节点时,也是首先固定下根节点,剩下n-1个节点,可以如下排放:n-1= (n-1)*0 + (n-2)*1 + (n-3)*2 + … + 0*(n-1)记做f(n)= f(n-1)*f(0) + f(n-2)*f(1) + f(n-3)*f(2) + f(n-4)*f(3) + …f(0)*f(n-1)
f(1),f(2), f(3), …, f(n)正好符合卡特兰数
递推公式为:
f(n)= f(n-1)*(4*n-2)/(n+1)
通向公式:
f(n)= C(n, 2n)/(n+1) = (2n)!/((n!)*(n+1)!)
JAVA算法实现
public Class Catalan { public static void main(String[] args) { System.out.println(“请输入需要计算的卡特兰数:”); Scannerreader = new Scanner(System.in); int num = reader.nextInt(); int result = getCatalina(num); System.out.println(num+ “ 卡特兰数为: ” +result); } public static int getCatalan(int num) { if(num == 1) { return1; } return getCatalan(num-1) * (4*n-2) / (n+1); }}
注:
满二叉树:除了叶子节点外,每个节点都有左右子树,所有的叶子节点都在最后一层
完全二叉树:深度为k层,除了第k层,其它每一层的节点数都达到该层所能容纳的最大节点数
平衡二叉树:左右子树高度差的绝对值不超过1
阅读全文
0 0
- 试求N个节点所能组成的二叉树的个数以及求解方法
- Catalan数—求解n个节点能组成的二叉树个数问题
- Catalan数—求解n个节点能组成的二叉树个数问题
- n 个节点可以组成的二叉树个数问题
- n节点组成二叉树的个数
- n节点组成二叉树的个数
- n节点组成二叉树的个数
- n节点组成二叉树的个数
- n节点组成二叉树的个数
- n节点组成二叉树的个数
- n节点组成二叉树的个数
- n节点组成二叉树的个数
- 给定N个节点求组成二叉搜索树个数——从一道算法题探讨神奇的Catalan数
- n个节点能组成多少种二叉树
- n个节点能组成多少种二叉树
- n个节点组成二叉树的形态有几种
- 求0—7所能组成的奇数个数。
- Catalan数得到应用——求解n个结点组成的二叉树的种类
- PHP的超全局变量以及相关魔术方法
- 先序后序和中序遍历
- heartbeat实现HA!!
- Jacky,我为你高兴!
- android BottomNavigationView(底部导航栏)
- 试求N个节点所能组成的二叉树的个数以及求解方法
- 机器学习&深度学习视频资料大汇总
- 堆排序
- javascript与node.js的区别
- 《Android源码设计模式解析与实战》读书笔记(十八)——代理模式
- 走出循环结构的几种方法:continue,break,goto,return
- 顺序表(静态)
- 程序员的自我修养
- c链表