《数据结构(C语言版)–严蔚敏》
问题:具有n个结点的不同形态的树有多少棵?下面我们先讨论二叉树的情况,然后可将结果推广到树。
在讨论二叉树的计数之前应先明确两个不同的概念。
称二叉树T和T’相似是指:二者都为空树或者二者都不为空树,且它们的左右子树分别相似。
称二叉树T和T’等价是指:二者不仅相似,而且所有对应结点上的数据元素均相同。
二叉树的计数问题就是讨论具体n个结点、互不相似的二叉树的数目bn。
在n值很小的情况下,可直观地得到:b0=1为空树;b1=1是只有一个根结点的树;b2=2和b3=5。
一般情况下,一棵具有n(n>1)个结点的二叉树可以看成是由一个根结点、一棵具有i个结点的左子树和一棵具有n−i−1个结点的右子树组成,其中0≤i≤n−1。由此可得下列递推公式:
求解该公式的具体过程略,感兴趣的可自行百度,这里直接给出结果,结果如下:
因此,含有n个结点的不相似的二叉树有1n+1Cn2n棵。
我们还可以从另一个角度来讨论这个问题。从二叉树的遍历已经知道,给定结点的前序序列和中序序列就可以确定一棵二叉树。
假设对二叉树的n个结点从1到n加以编号,且令其前序序列为1,2,…,n,则不同形态的二叉树的数目恰好是前序序列均为12…n的二叉树所能得到的中序序列的数目。而中序遍历的过程实质上是一个结点进栈和出栈的过程。由此,由前序序列12…n所能得到的中序序列的数目恰为数列12…n按不同顺序进栈和出栈所能得到的排列的数目。这个数目为Cn2n−Cn−12n=1n+1Cn2n。
由二叉树的计数可推得树的计数。一棵树转换成唯一的一棵没有右子树的二叉树,反之亦然。则具有n个结点有不同形态的树的数目tn和具有n−1个结点互不相似的二叉树的数目相同。即tn=bn−1。
ps,这里说的树的计数是指有序数。(即有位置区别)
本文探讨了数据结构中关于树的计数问题,重点分析了二叉树的计数。通过递推公式解释了具有n个结点的不同形态的二叉树数目bn,并指出bn的递推关系。同时,文章提到了树的计数可通过二叉树转换,两者数目相等,即tn=bn−1。内容涉及二叉树的相似与等价定义,以及利用遍历和排列组合计算树的形态数量。
933

被折叠的 条评论
为什么被折叠?



