2019年上半年选择题第58题
有3个结点的二叉树有5种,可以推测出4个结点的二叉树有几种形态?
这是个卡塔兰数应用,把没使用节点看做0 使用了节点看做1 最后看出现的形状
定义
1.卡特兰数是一种数列,以比利时的数学家欧仁·查理·卡塔兰命名。是组合数学中一个常出现在各种计数问题中出现的数列
2.卡特兰数列:1, 1, 2, 5, 14, 42, 132, 429, 1430, 4862, 16796, 58786, 208012……
公式
- 令h(0)=1,h(1)=1,catalan数满足递推公式
:
h(n)= h(0)h(n - 1) + h(1)h(n-2) + ... + h(n - 1)h(0) (n≥2) 【1】
例如:
h(2)=h(0)h(1) + h(1)h(0)=1·1 + 1·1=2
h(3)=h(0)h(2) + h(1)h(1) + h(2)h(0)=1·2 + 1·1 + 2·1=5 - 项与项之间递推式
h(n)=h(n - 1)(4·n - 2)/(n + 1)(n≥1) 【2】 - 组合公式
h(n)=C(2n,n)/(n + 1)=C(2n,n) - C(2n,n - 1)(n≥0) 【3】(其中C(2n,n)表示2n个中取n个的组合数)
注:组合数的计算
从n个不同元素中每次取出m个不同元素(0≤m≤n),不管其顺序合成一组,称为从n个元素中不重复地选取m个元素的一个组合。所有这样的组合的总数称为组合数,
或
排列组合计算方法如下:
排列A(n,m)=n×(n-1).(n-m+1)=n!/(n-m)!(n为下标,m为上标,以下同)
组合C(n,m)=P(n,m)/P(m,m) =n!/m!(n-m)!;
例如:
A(4,2)=4!/2!=4*3=12
C(4,2)=4!/(2!*2!)=4*3/(2*1)=6
C(6,3)=6×5×4÷(3×2×1)=20。
公式理解
将递推公式【1】转化成给定N个节点,能构成多少种形状不同的二叉树问题。
将二叉树分为左子树和右子树以及根节点,已知根节点需要1个节点数,令i(i<N)个节点构成左子树,得到N - i - 1个节点构成右子树。这时可将由i个节点的左子树递归看成由i个节点构成的树的问题,同样N-i-1个节点的右子树仍可递归看成N-i-1个节点构成的树。没使用节点看做0 使用了节点看做1 最后看出现的形状
h(i)·h(N - i - 1)即第i(0≤i≤N-1)种情形,又因为i的取值范围为[0,N-1],所以得:
h(n)= h(0)h(n - 1) + h(1)h(n-2) + ... + h(n - 1)h(0) (n≥2)【1】。
当N=3时的二叉树种类:
3个节点的二叉树
将递推公式【3】转化为01排列问题,有n对01排成一个序列,从左往右统计该序列0和1的个数,1的个数小于等于0的个数即视为合法序列。
将n个0放入2n个位置上有C(2n,n)个组合情况为全排列情形,再减去不合法序列即为卡特兰数。
例如:
001101为一合法序列
011010为不合法序列(异常位为3)
经分析得知不合法序列的异常位总会出现在奇数位。
假设异常位为2i+1(0≤i<n),由此可知[0,2i+1]序列有i个0,i+1个1,在[2i+1,2n]序列有n-i个0,n-i-1个1,将[2i+1,2n]序列中的1置换为0,0置换为1,如(011010==>011101)由此可知2n的序列中有n-1个0,n+1个1,将n-1个0放入2n个位置上则有C(2n,n-1)个组合情况,该排列即为不合法情形。
所以可得:h(n)=C(2n,n)/(n + 1)=C(2n,n) - C(2n,n - 1)(n≥0) 【3】