二叉树的特性

Posted wawees

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉树的特性相关的知识,希望对你有一定的参考价值。

二叉树是啥?


二叉树的定义如下:

二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根节点的左子树和右子树的二叉树组成。

其实我也挺迷糊的。因为之前查过挺多资料的,在书中分别看到了以下两种观点:

二叉树是一种遵循以下规则的树:

  • 每个结点的子结点数量可以为0,1,2

  • 如果有两个子结点,则其中一个子结点的值必须小于父结点,另一个子结点的值必须大于父结点

二叉树的特点:

  • 每个结点最多有两颗子树

  • 左子树和右子树是由顺序的,次序不能任意颠倒

  • 即使树中某个结点只有一棵子树,也要区分它是左子树还是右子树

标出的部分可以看出矛盾点在于,到底需不需要一个结点大于父结点,一个结点小于父结点???可以肯定的是,它一定是有序的。

另外,二叉树具有五种形态:

  1. 空二叉树

  2. 只有一个根结点

  3. 根结点只有左子树

  4. 根结点只有右子树

  5. 根结点既有左子树又有右子树

特殊的二叉树形态

  • 斜树:所有的结点都只有左子树,称为左斜树。所有的结点都只有右子树,称为右斜树。

  • 满二叉树:如果所有分支结点都存在左子树和右子树,且所有叶子都是同一层上

  • 完全二叉树:具有n个结点的二叉树按层序编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号i的结点在二叉树中的位置完全相同,则为完全二叉树。

由上面的解释可以得到,满二叉树一定是完全二叉树,反之亦然。

满二叉树每个结点下挂两个子结点,且最后一层必须是叶子都长齐了的。

完全二叉树等于在满二叉树上面进行剪枝,叶子只能出现在最下两层上。最后一层上有叶子,那么一定是聚集在左边连续位置上的。如果倒数第二层上有叶子,一定在聚集在右边连续的位置上(类似下面的完全二叉树,如果把e结点剔除,就可以很明显的看到b结点是在倒数第二层上面的叶子)。如果一个结点的度为1,则这个结点肯定只有左边的子结点,没有右边的子结点(由于二叉树的定义中,左右结点的顺序是有序的,如果这里少了左结点,而存在右结点的话,等于需要跳跃了一个,不是连续的了)。

如果大家都有5个结点,斜树的深度为5层。完全二叉树的深度为3层。由于只有5个结点,它不是满二叉树。得到完全二叉树的深度最小。但是如果有7个结点呢,斜树的深度为7层。完全二叉树的深度为3层。由于只有7个结点,它又是满二叉树,也是7层。得到完全二叉树的深度等于满二叉树的深度,依旧是最小。(画错了,斜树中的c结点,应该为b结点)

二叉树的特性

  1. 在二叉树的第i层上至多有 个结点(

    第i=1层, ,只有一个Root结点

    第i=2层, ,最多2个结点

    第i=3层, ,最多4个结点

    …依次类推

  2. 深度为k的二叉树至多有 个结点(

    同样用数学归纳法可以验证

  3. 对任意一个二叉树T,如果其终点结点为 ,度为2的结点数为 ,则

  4. 具有n个结点的完全二叉树的深度为

    由于完全二叉树的结点数小于或者等于同样深度的满二叉树( ),但一定大于 个,且由于结点数肯定是整数的,所以可以得到 ,通过对数运算得到 ,从而得到

  5. 如果对一棵有n个结点的完全二叉树(其深度为 )的结点按层序编码(从第一层到第 层,每层从左到右),对任一结点i( )有:

    • 如果 ,则结点i是二叉树的根,无双亲;如果 ,则双亲是结点

    • 如果 ,则结点i无左孩子;否则其左孩子是结点2i

    • 如果 ,则结点i无右孩子;否则其右孩子是结点2i+1

以上是关于二叉树的特性的主要内容,如果未能解决你的问题,请参考以下文章

数据结构开发(22):二叉树的转换深层特性与存储结构设计

二叉树的三种遍历方式

完全二叉树节点的计算(2021-8-3)

树二叉树满二叉树完全二叉树遍历二叉树java实现

第六十课 二叉树的深层特性

统计二叉树的节点个数