二叉树

来源:互联网 发布:网络信息安全总结 编辑:程序博客网 时间:2024/05/20 12:24

        在上堂课中,我们将到了树这个定义。在树中,有很多的概念,比方说,从单独的节点来分,就可以有根节点以及叶子节点的区别;从纵向的关系来说,就有父亲,祖先,儿子,孙子之类的划分;从横向的关系,就有兄弟的关系属性的表达。树的高度我们用深度来表示,从根节点开始分别是第一层,第二层,依此类推。而根据根节点以及叶子节点的划分标准,又可以引申出度的概念。所谓度,就是指节点的分支数目。

        今天我们讲什么呢?我们为大家讲述一种特别的树,这种树有什么特点呢?第一个特点就是树中的任何一个节点的度,也就是分支的数目不超过2个。好,现在请大家可以自己根据这个条件画一下符合这种条件的树出来。我们可以看出符合这种条件的树,有很多很多,现在呢,我根据前面的情况发现大家画的树,基本上都是差不多的,我为大家画几棵特别一点的树,大家来分析一下,这些树符不符合我们所说的特点。

        如果一个根节点只有一个分支,这样的树,其实也有很多种画法,其中一种画法是分支在左边,另外一种画法是分支在右边。很多同学就问了,在左边和在右边不是一样的吗?有什么问题,在我们数据结构这棵特别的树里,除了上述要求以外,还必须满足,分支有顺序的要求。也就是说,分支方位不一样,形成的树是不一样的。为什么只有两个方位可以供选择呢?原因很简单,因为我们最多是只有两个分支。

       至此,我们得到了关于这种树的二个定义,而这种特别的树,也有一个很特别的名字就是二叉树。

       好,二叉树的种类其实也蛮多的,我们就根据树的高度来划分,请做一个很简单的练习,画一棵深度为4的二叉树,要求你画的二叉树的节点数目是所有深度为4的二叉树中,节点数目最多的。好,其实很简单,大家可以看到,这棵树啊,为了使得节点数目最多,我们选择了使得每个节点都尽量挂满分支。像这种除了叶子节点以外,其他节点的分支都是2的二叉树,我们称之为满二叉树。能不能请大家算一下,这个满二叉树的节点数总共是多少?怎么算的?第一层是1个节点,第二层是2,第三层是4,第四层是8,所以总共是1+2+4+8 = 15个节点。那么如果是深度为5的满二叉树呢?我们其实是可以推导出一个公式的,即深度是 n的满二叉树的节点数目是2的n次方减1。既然我们可以把满二叉树的总节点数都可以计算出来,具体每一层的节点数目自然是不在话下了。

      有时候,我们为了方便说明,常常会把每个节点进行编号。比如说根节点就是1号,第二层的按顺序依次是2,3,,第三层的是4,5,6,7,第四层的分别是8,9,10,11,12,13,14,15。

而其他类型的二叉树就是在满二叉树的基础上进行修改的。比如说,删除13号节点,删除15号节点都可以形成不同的二叉树。在这里,如果删除的节点是从末尾开始连续删除的话,那么这种二叉树,称为完全二叉树。因为节点编号,中间没有漏缺。所以称完全二叉树。

      给每个节点编号,有什么好处?就是容易把所有节点的父子关系描述清楚,比如说,2,3号节点的父亲的编号是1.而4,5号节点的编号是2,我们归纳一下,就是节点是n的父亲编号是【n/2】,而它的孩子节点的编号是2n,2n+1.这个其实比较容易理解的。

      先前的知识点都是说,已经知道深度,求节点的最大数目。最后我们要反向做两个结论。第一个结论是关于,已知节点数目,然后求树的深度的问题。

     问题一:节点数目是n的完成二叉树,它的深度是多少?

     第二个问题,就是更细节一点了,我们知道,二叉树中的节点的度数最多的是2,那么就是也可能存在度数为1,和度数为0的节点。我们想知道的是,度数为2的节点个数与叶子节点个数有什么关系?

    

原创粉丝点击