树的计数

本文探讨了数据结构中关于树的计数问题,重点分析了二叉树的计数。通过递推公式解释了具有n个结点的不同形态的二叉树数目bn,并指出bn的递推关系。同时,文章提到了树的计数可通过二叉树转换,两者数目相等,即tn=bn−1。内容涉及二叉树的相似与等价定义,以及利用遍历和排列组合计算树的形态数量。

《数据结构(C语言版)–严蔚敏》
  问题:具有n个结点的不同形态的树有多少棵?下面我们先讨论二叉树的情况,然后可将结果推广到树。
  在讨论二叉树的计数之前应先明确两个不同的概念。
  称二叉树T和T’相似是指:二者都为空树或者二者都不为空树,且它们的左右子树分别相似。
  称二叉树T和T’等价是指:二者不仅相似,而且所有对应结点上的数据元素均相同。
  二叉树的计数问题就是讨论具体n个结点、互不相似的二叉树的数目bn
  在n值很小的情况下,可直观地得到:b0=1为空树;b1=1是只有一个根结点的树;b2=2b3=5
  一般情况下,一棵具有n(n>1)个结点的二叉树可以看成是由一个根结点、一棵具有i个结点的左子树和一棵具有ni1个结点的右子树组成,其中0in1。由此可得下列递推公式:

y={b0=1bn=n1i=0bibni1,n1

  求解该公式的具体过程略,感兴趣的可自行百度,这里直接给出结果,结果如下:
bn=(2n)!n!(n+1)!=1n+1Cn2n

  因此,含有n个结点的不相似的二叉树有1n+1Cn2n棵。

  我们还可以从另一个角度来讨论这个问题。从二叉树的遍历已经知道,给定结点的前序序列和中序序列就可以确定一棵二叉树。
  假设对二叉树的n个结点从1到n加以编号,且令其前序序列为1,2,…,n,则不同形态的二叉树的数目恰好是前序序列均为12…n的二叉树所能得到的中序序列的数目。而中序遍历的过程实质上是一个结点进栈和出栈的过程。由此,由前序序列12…n所能得到的中序序列的数目恰为数列12…n按不同顺序进栈和出栈所能得到的排列的数目。这个数目为Cn2nCn12n=1n+1Cn2n
  由二叉树的计数可推得树的计数。一棵树转换成唯一的一棵没有右子树的二叉树,反之亦然。则具有n个结点有不同形态的树的数目tn和具有n1个结点互不相似的二叉树的数目相同。即tn=bn1
  ps,这里说的树的计数是指有序数。(即有位置区别)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值