第7章树和二叉树:二叉树的定义和性质
7.2 二叉树的定义和性质
1. 二叉树的定义
二叉树(Binary tree)是 n (n≥0)n~(n\ge0)n (n≥0) 个结点所构成的集合,它或为空树(n=0n=0n=0);或为非空树,对于非空树 TTT:
- 有且仅有一个称之为根的结点;
- 除根结点之外的其余结点分为两个互不相交的子集 T1T_1T1 和 T2T_2T2 ,分别称为 TTT 的左子树和右子树,且 T1T_1T1 和 T2T_2T2 本身又都是二叉树。
二叉树的定义是递归的,并且根据定义不难看出,它有如下特点:
- 二叉树每个结点至多只有两棵子树,即二叉树中不存在度大于 2 的结点;
- 二叉树的子树有左右之分,其次序不能任意颠倒,即二叉树是有序树。
根据上述定义,可知二叉树可以有如图 7.2.1 所示的 5 种基本形态。
二叉树的结构简单、存储效率高,相关运算的算法也相对简单,而且,任何 mmm 次树都可以转化为二叉树结构,因此二叉树具有很重要的地位。
注意区分:二叉树 VS 度为 2 的树(2 次树)(讨论非空树)。
2. 满二叉树和完全二叉树
满二叉树和完全二叉树,是两种特殊形态的二叉树。
(1)满二叉树:在一颗二叉树中,如果所有具有分支的结点都有左孩子和右孩子,并且叶子结点都集中在二叉树的最下一层,这样的二叉树称为满二叉树(Full Binary Tree),如图 7.2.2 所示。
非空满二叉树的特点:
- 深度(高度)为 hhh 且含有 2h−12^h-12h−1 个结点。
- 每一层上的结点数都是最大结点数,即第 iii 层的结点数是 2i−12^{i-1}2i−1 。
- 叶子结点都在最下一层。
- 只有度为 0 和度为 2 的结点。
(2)完全二叉树(Complete Binary Tree):若二叉树中最多只有最下两层的结点的度数可以小于 2,并且最下面一层的叶子结点都依次排列在该层最左边的位置上,则这样的二叉树称为完全二叉树,如图 7.2.3 所示。
完全二叉树的特点:
- 叶子结点只可能在最下面两层中出现。
- 对于最大层次中的叶子结点,都依次排列在该层最左边的位置上。
- 如果有度为 1 的结点,只可能有一个,且该结点只有左孩子而无右孩子。
- 当结点总数 nnn 为奇数时,n1=0n_1=0n1=0 (度为 1 的结点数是 0 个);当结点总数 nnn 为偶数时,n1=1n_1=1n1=1 。
- 对任意结点,若其右分支下的子孙的最大层次为 lll ,则其左分支下的子孙最大层次必为 lll 或 l+1l+1l+1 。
- 满二叉树是完全二叉树的一种特例。
3. 二叉树的性质
【性质 1】非空二叉树上的叶子结点数(度为 0 的结点数,记作 n0n_0n0)等于双分支结点数(度为 2 的结点数,记作 n2n_2n2)数加 1:n0=n2+1n_0=n_2+1n0=n2+1。
证明:
设二叉树上的叶子结点数为 n0n_0n0 ,即度为 0 的结点数;度为 1 的结点(只有单分支的结点)数为 n1n_1n1 ;度为 2 的结点(有两个分支的结点)数为 n2n_2n2 。则这棵二叉树总结点数 nnn 为:
n=n0+n1+n2
n=n_0+n_1+n_2
n=n0+n1+n2
又因为:
- 每个度为 1 的结点,有一个分支,则 n1n_1n1 个度为 1 的结点,有 n1n_1n1 个分支,即所有度为 1 的结点的总的度数是 n1n_1n1 ;
- 每个度为 2 的结点,有两个分支,则 n2n_2n2 个度为 2 的结点,有 2n22n_22n2 个分支,即所有度为 2 的结点的总的度数是 2n22n_22n2 ;
故:所有结点的分支数,即所有结点的度之和=n1+2n2n_1+2n_2n1+2n2 。
在二叉树中,除了根结点之外,每个结点都有唯一一个分支指向它,假设二叉树中的结点总数为 nnn ,那么用 nnn 表示的分支总数为 n−1n-1n−1 。
所以:n1+2n2=n−1n_1+2n_2 = n-1n1+2n2=n−1 。将 n=n0+n1+n2n=n_0+n_1+n_2n=n0+n1+n2 代入此式,最终得到:
n0=n2+1
n_0=n_2+1
n0=n2+1
二叉树问题中计算结点时常用的关系式:
- 所有结点的度之和 = n−1n-1n−1 = n1+2n2n_1+2n_2n1+2n2
- n=n0+n1+n2n=n_0+n_1+n_2n=n0+n1+n2
【性质 2】在非空二叉树的第 iii 层上至多有 2i−12^{i-1}2i−1 个结点(i≥1i\ge1i≥1)。
证明:利用归纳法
当 i=1i=1i=1 时,只有一个根结点。显然,2i−1=20=12^{i-1}=2^0=12i−1=20=1 ,命题成立。
假设在第 i−1 (i>2)i-1~(i\gt2)i−1 (i>2) 层命题成立,即至多有 2i−22^{i-2}2i−2 个结点。
由于二叉树每个结点的度最大值是 2,即每个节点最多有 2 个分支,每个分支对应一个结点。那么在第 iii 层上最大的结点数是第 i−1i-1i−1 层上最大结点数的 2 倍,即:
2×2i−2=2i−1 2\times2^{i-2}=2^{i-1} 2×2i−2=2i−1
故原命题成立。
【性质 3】深度(高度)为 hhh 的二叉树至多有 2h−12^h-12h−1 个结点(k≥1k\ge1k≥1)。
证明:
根据二叉树的深度(高度)的定义可知,深度(高度)为 hhh ,即二叉树共有 hhh 层,即从根结点的第 1 层到叶子结点的第 hhh 层。
根据性质 2 可知,每一层的结点最大数量是 2i−12^{i-1}2i−1 ,于是二叉树总的结点数的最大值是:
∑i=1h2i−1 \sum_{i=1}^h2^{i-1} i=1∑h2i−1
根据 ∑i=0n2i=2n+1−1\sum\limits_{i=0}^n2^i=2^{n+1}-1i=0∑n2i=2n+1−1 ,可得:
∑i=1h2i−1=2h−1 \sum_{i=1}^h2^{i-1}=2^h-1 i=1∑h2i−1=2h−1
【性质 4】(完全二叉树)具有 nnn 个结点的完全二叉树的深度(高度)为 ⌊log2n⌋+1\lfloor\log_2n\rfloor+1⌊log2n⌋+1 。
证明:
假设完全二叉树的深度(高度)为 hhh ,结点总数为 nnn ,由性质 3 可得:n≤2h−1n\le2^h-1n≤2h−1 。
对于高度为 hhh 的完全二叉树,根据完全二叉树的定义可知,从根结点的第 1 层到第 h−1h-1h−1 层,每层根结点都是“满的”(相当于高度为 h−1h-1h−1 的满二叉树),每层结点数:
层序 结点数 1 21−12^{1-1}21−1 2 22−12^{2-1}22−1 3 23−12^{3-1}23−1 ⋮\vdots⋮ ⋮\vdots⋮ h−1h-1h−1 2h−22^{h-2}2h−2 所以,高度为 h−1h-1h−1 的满二叉树的结点总数是:
20+21+⋯+2h−1=∑i=1h−12i−1=2h−1−1 2^0+2^1+\cdots+2^{h-1}=\sum_{i=1}^{h-1}2^{i-1}=2^{h-1}-1 20+21+⋯+2h−1=i=1∑h−12i−1=2h−1−1
根据完全二叉树定义可知,高度为 hhh 的完全二叉树总结点数 nnn 一定大于 2h−1−12^{h-1}-12h−1−1 。故:
2h−1−1<n≤2h−12h−1≤n<2hh−1≤log2n<h \begin{split} 2^{h-1}-1\lt &n\le2^h-1 \\2^{h-1}\le &n\lt 2^h \\h-1\le&\log_2n\lt h \end{split} 2h−1−1<2h−1≤h−1≤n≤2h−1n<2hlog2n<h
所以:h≤log2n+1h\le\log_2n+1h≤log2n+1 ,且 h>log2nh\gt\log_2nh>log2n又因为 hhh 是正整数,所以:h=⌊log2n⌋+1h=\lfloor\log_2n\rfloor+1h=⌊log2n⌋+1 ,即 h=log2(n+1)h=\log_2(n+1)h=log2(n+1) 或者 h=log2n+1h=\log_2n+1h=log2n+1 。
例 7.2.1 一棵完全二叉树上有 1001 个结点,其中叶子结点的个数是( )。
A. 250\qquad B. 500\qquad C. 254\qquad D. 501
【解】
假设完全二叉树中,度为 0 的结点(叶结点)个数为 n0n_0n0 ,度为 1 的结点个数为 n1n_1n1 ,度为 2 的结点个数为 n2n_2n2 ,根据题意可知:
n0+n1+n2=1001(1)
n_0+n_1+n_2=1001\tag{1}
n0+n1+n2=1001(1)
又由二叉树的性质一:
n0=n2+1(2)
n_0=n_2+1\tag{2}
n0=n2+1(2)
再根据完全二叉树的特点可知,n1n_1n1 的值可能是:
n1={0,此时完全二叉树的结点总数是奇数1,此时完全二叉树的结点总数是偶数
n_1=\begin{cases}0,此时完全二叉树的结点总数是奇数\\1,此时完全二叉树的结点总数是偶数\end{cases}
n1={0,此时完全二叉树的结点总数是奇数1,此时完全二叉树的结点总数是偶数
本题中完全二叉树的结点总数是 1001(奇数),所以 n1=0n_1=0n1=0 ,结合(1)(2)式,计算可得:n0=501n_0=501n0=501 。
本题答案:D
例 7.2.3 一个具有 1025 个结点的二叉树的高 h 为( )。
A. 11\qquad B. 10\qquad C. 11至1025之间\qquad D.10至1024之间
【解】
- 当每层只有一个结点时,二叉树的高度最高,此时 h=1025h=1025h=1025 ;
- 当二叉树趋于满二叉树(即为完全二叉树)时,高度最小,此时 h=⌊log2n⌋+1=⌊log21025⌋+1=11h=\lfloor\log_2n\rfloor+1=\lfloor\log_21025\rfloor+1=11h=⌊log2n⌋+1=⌊log21025⌋+1=11
所以 hhh 介于 11 和 1025 之间。
本题答案:C
例 7.2.4 深度为 hhh 的满 mmm 叉树的第 kkk 层有( )个结点。(1≤k≤h1\le k\le h1≤k≤h)
A. mk−1m^{k-1}mk−1\qquad B. mk−1m^k-1mk−1\qquad C. mh−1m^{h-1}mh−1\qquad D. mh−1m^h-1mh−1
【解】
满 mmm 叉树每个非叶子结点有 mmm 个分支,则:
- 第 1 层是根结点,有 1 个结点;
- 第 2 层有 mmm 个结点;
- 第 3 层有 m2m^2m2 个结点;
- 第 4 层有 m3m^3m3 个结点;
- ⋯\cdots⋯
- 第 kkk 层有 mk−1m^{k-1}mk−1 个结点;
- ⋯\cdots⋯
- 第 hhh 层有 mh−1m^{h-1}mh−1 个结点。
满 mmm 叉树的结点总数是 mk−1m^{k-1}mk−1 个。
本题答案:A