二叉树的性质和证明
前言
本篇博客主要讲述的是有关二叉树的一些概念,性质以及部分性质的相关证明,如果大伙发现了啥错误,可以在评论区指出😘😘
1.二叉树的概念和结构
一棵二叉树是节点的一个有限集合,该集合:
- 或者为空
2.由一个根节点加上两棵别称为左子树和右子树的二叉树组成。
如下图所示:
特殊的二叉树:
- 满二叉树:一个二叉树,每一层的节点都达到最大值,这个二叉树就是满二叉树。也就是说,如果一个二叉树的层次为k,且结点总数是2^k-1,这棵树就是满二叉树。
由于每层都是满的,所以节点总数:
2^0 + 2^0 + 2^1 + ······+ 2^(k-1) = 2^k - 1
- **完全二叉树:**完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为k的,有n个节点的二叉树,当且仅当其每个节点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。 要注意的是满二叉树是一种特殊的完全二叉树。(通俗的来讲,就是当二叉树的前k-1层为满二叉树,最后一层的节点连续排布时就是完全二叉树)
从该定义同时也可以知道,满二叉树是一个特殊的完全二叉树。
如下图所示即是满二叉树:
二叉树的性质
- 若规定根节点的层数是1,则一颗非空二叉树第i层上最多有2^(i-1)个结点。(根据二叉树的结构不难看出)
- 若规定根结点的层数为1,则深度为h的二叉树的最大结点数是 2 h − 1 2^h-1 2h−1.
上面在讲解满二叉树时已经给出证明。
- 对于任何一棵二叉树,如果度为0其叶节点个数为 n 0 n_0 n0,度为2的分支结点个数为 n 2 n_2 n2,则有 n 0 n_0 n0 = n 2 n_2 n2 + 。
这里提供两种方法进行帮助理解:
1.关系推导:
(1)首先,对一个只有根节点的树添加一个结点,此时度为0的结点数不点,也就是增加一个度为1的结点,并不影响度为0的结点和度为2的结点个数。
(2)在此之后,每次多一个度为2的结点数,度为0的结点数也会增加一个,所以度为0的结点数总是比度为2的结点数多1。
2. 数学推导
已知一棵二叉树的结点总数为
S S S = n 0 n_0 n0+ n 1 n_1 n1+ n 2 n_2 n2
S S S = n 2 ∗ 2 n_2*2 n2∗2 + n 1 ∗ 1 n_1*1 n1∗1 + n 0 ∗ 0 n_0*0 n0∗0
联立两式即可得出 n 0 n_0 n0 = n 2 + 1 n_2+1 n2+1
- 若规定根结点的层数为1,具有n个结点的满二叉树的深度,h= l o g 2 ( n + 1 ) log_2(n+1) log2(n+1)。
该性质的证明即是结点总个数的逆推导。
- 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的数组顺序对所有结点从0开始编号,则对于序号为i的结点有:
- 若i>0,i位置结点的双亲序号:(i-1)/2;i=0,i为根结点编号,无双亲结点
- 若2i+1<n,左孩子序号:2i+1,2i+1>=n否则无左孩子
- 若2i+2<n,右孩子序号:2i+2,2i+2>=n否则无右孩子