完全二叉树和满二叉树
在排序算法中有一种叫做堆排序的方法,堆一般是用完全二叉树实现,所以记录下完全二叉树和满二叉树
完全二叉树:若设二叉树的深度为h,除第h层外,其他各层(1~h-1)的节点数都达到最大个数,第h层所有节点都连续集中在最左边,这就是完全二叉树
满二叉树:除最后一层无任何子节点外,每一层上的所有结点都有两个子结点。满二叉树一定是完全二叉树,不同的是最后一层的所有节点都有两个字节点。
图片来源:https://blog.****.net/njdragonfly/article/details/6373199
完全二叉树的特点:
性质1 :总层数为n,第层上节点个数为,第n层的叶子节点最多为
证明:
(1)第一层的节点个数为;
(2)第二层的节点个数为;
(3)第层的节点个数为;
(4)最后一层叶子节点最多为(满二叉树);
性质2: 深度为n的二叉树,最多有2n-1:
证明:
假设第i层的节点数为X i,则
性质3:对于非空的二叉树,如果叶子节点数为,度为2的节点数为,度为1的节点数为,z则有
证明:
设为二叉树的节点总数,则有.另一方面,除根节点之外,其余所有节点有唯一的一个进入分支。设为二叉树的分支数,那么:,这些分支是由度为1和度为2的节点发出的,所以:,综上所述:
性质4: 具有个节点的完全二叉树的深度为为
证明:
假设一颗完全二叉树的深度为,节点个数为,则有:
即:
同时取对数:
所以的 取值为:
性质5:
对于具有 N 个节点的完全二叉树,如果按照从上至下和从左到右的顺序
对二叉树中的所有节点从 1 开始顺序编号,则对于任意的序号为 的
节点,有,
(1) 如果 $ i> 1$ 则序号为 的节点的双亲节点的序号为 如果 i = 1则序号为 的节点是根节点, 无双亲节点;
(2) 如果 则序号为 i 的节点的左孩子节点的序号为 如果 则序号为 的节点无左孩子;
(3) 如果 ,则序号为 的节点的右孩子节点的序号为,如果 ,则序号为的节点无右孩子;