【二叉树的定义】
二叉树( binary tree)是 $n(n \geq 0)$ 个结点的有限集合,$n=0$ 时为空二叉树
对于非空二叉树,有:
- 除根结点外,每个结点或为空
- 每个结点或由一个根结点与两棵互不相交的,称为根结点的左子树、右子树的二叉树构成
二叉树具有以下特点:
- 每个结点最多有两棵子树,即不存在 $degree>2$ 的结点
- 二叉树是有序树,即使树中的某个结点只有一棵子树,也要区分它是左子树还是右子树
二叉树存在以下五种基本形态
【特殊二叉树】
斜树
所有的结点都只有左子树的二叉树称为左斜树,所有的结点都只有右子树的二叉树称为右斜树
在斜树中,每层只有一个结点,因此斜树的结点个数与其深度相同
满二叉树
在一棵二叉树中,若所有的分支结点都存在左子树和右子树,且所有的叶子都在同一层上,则称为满二叉树
满二叉树具有以下特点:
- 叶子只能出现在最下一层
- 除叶结点度为 $0$ 外,其他结点度均为 $2$
- 高度为 $h$ 的满二叉树,具有 $2^h-1$ 个结点
由于满二叉树的特性可知:满二叉树在同样深度的二叉树中结点个数、叶结点个数最多
从根结点起,对满二叉树自上而下,自左到右进行编号,这称为层序编号,对于编号为 $i$ 的结点,双亲编号为 $\left\lfloor \frac{i}{2} \right\rfloor$,左孩子编号为 $2i$,右孩子编号为 $2i+1$
完全二叉树
对一棵具 $n$ 个结点的二叉树按层序编号,若编号为 $i$ 的结点与同样深度的满二叉树中编号 $i$ 的结点在二叉树中的位置完全相同,则称为完全二叉树,那么显然有:满二叉树是完全二叉树
完全二叉树具有以下特点:
- 叶结点只能出现在最下两层,且最下层的叶结点都集中在二叉树左侧连续的位置
- 若有度为 $1$ 的结点,只可能有一个,且其只有左孩子
- 深度为 $k$ 的完全二叉树在 $k -1$ 层上一定是满二叉树
- 对于具有 $n$ 个结点的完全二叉树,当第 $i$ 个结点满足 $i \leq \left\lfloor \frac{n}{2} \right\rfloor$ 时为分支结点,当 $i > \left\lfloor \frac{n}{2} \right\rfloor$ 时为叶结点
简单来说,在满二叉树中,从最后一个结点开始,连续去掉任意个的结点,即是一棵完全二叉树
其他
除斜树、完全二叉树、满二叉树外,还有具有其他特点的二叉树,常见的有:
- 堆:每个结点值都大于等于或小于等于左右孩子结点的值的二叉树
- 霍夫曼树:
WPL
最小的二叉树 - 二叉排序树:左子树结点值小于根结点,右子树结点值大于根结点值的二叉树
- 平衡二叉树:左右子树高度差的绝对值不超过 $1$ 的二叉树
【二叉树的性质】
二叉树具有以下性质:
1.二叉树的第 $i$ 层上最多有 $2^{i-1},i\geq1$ 个结点
2.在一棵高度为 $h$ 的二叉树中,最多有 $2^h-1$ 个结点,最少有 $h$ 个结点
推论:高度为 $h$ 且具 $2^h-1$ 个结点的二叉树一定是满二叉树,但深度为 $h$ 具有 $h$ 个结点的二叉树不一定是斜树
3.具有 $n$ 个结点的二叉树,其分支数(边):$B=n-1$,对于任意一个结点,每度贡献一个分支,即:度为 $0$ 的结点贡献 $0$ 个分支,度为 $1$ 的结点贡献 $1$ 个分支,度为 $2$ 的结点贡献 $2$ 个分支
4.在一棵二叉树中,若叶结点个数为 $n_0$,度为 $2$ 结点个数为 $n_2$,那么有:$n_0=n_2+1$
5.具有 $n$ 个结点的完全二叉树的高度为 $\left\lfloor log_2(n+1) \right\rfloor$ 或 $\left\lfloor log_2n \right\rfloor +1 $
6.具有 $n$ 个结点的完全二叉树,可由结点数推出度为 $0,1,2$ 的结点个数 $n_0,n_1,n_2$
- 完全二叉树最多只有一个度为 $1$ 的结点,即:$n_1=0$ 或 $n_1=1$
- 完全二叉树叶结点个数为双分支结点个数 $+1$,即:$n_0=n_2+1$
- 若完全二叉树有 $2k$ 个结点,则有:$n_1=1,n_0=k,n_2=k-1$
- 若完全二叉树有 $2k+1$ 个结点,则有:$n_1=0,n_0=k,n_2=k-1$
7.对一棵具有 $n$ 个结点的完全二叉树,从 $1$ 开始按层序编号,则对于任意编号 $i$ 的结点,有:
- 若 $i=1$,则结点 $i$ 为根结点;若 $i>1$,则结点 $i$ 的父结点编号为 $\left\lfloor \frac{i}{2} \right\rfloor$
- 若 $i>\left\lfloor \frac{i}{2} \right\rfloor$ 则结点 $i$ 为叶结点,若 $i \leq \left\lfloor \frac{i}{2} \right\rfloor$ 则结点 $i$ 为分支结点
- 若 $2i\leq n$,则:结点 $i$ 的左孩子编号为 $2i$;若 $2i>n$,则结点 $i$ 无左孩子
- 若 $2i+1 \leq n$,则:结点 $i$ 的右孩子编号为 $2i+1$;若 $2i+1>n$,则结点 $i$ 无右孩子
- 结点 $i$ 的层次为 $\left\lfloor log_2(n+1) \right\rfloor$ 或 $\left\lfloor log_2n \right\rfloor +1 $