众所周知,在树的领域中,尤以二叉树为研究重点。故我们将展开学习二叉树的性质。
二叉树的定义
每个结点的度均不超过 2 的有序树,称为二叉树(binary tree)。
与树的递归定义类似,二叉树的递归定义如下:二叉树或者是一棵空树,或者是一棵由一个根结点和两棵互不相交的分别称为根的左子树和右子树的子树所组成的非空树。
由以上定义可以看出,二叉树中每个结点的孩子数只能是 0、1 或 2 个,并且每个孩子
都有左右之分。位于左边的孩子称为左孩子,位于右边的孩子称为右孩子;以左孩子为根的子树称为左子树,以右孩子为根的子树称为右子树。
二叉树的性质
在二叉树中具有以下重要性质。
在二叉树的第i层上最多有 个结点。
高度为h的二叉树至多有 个结点。(h=0,1,2..)
对任何一棵二叉树T,如果其终端结点数为 ,度为 2 的结点数为 ,则=+1。
下面介绍两种特殊的二叉树,然后讨论其有关性质。
满二叉树:高度为k并且有 2 k+1-1 个结点的二叉树。在满二叉树中,每层结点都达到最大数,即每层结点都是满的,因此称为满二叉树。图 6-2(a)所示的二叉树就是一棵满二叉树。可以对满二叉树的结点进行编号,约定编号从根结点起,层间自上而下,层内自左而右,逐层由 1 到 n 进行标号。
完全二叉树:若在一棵满二叉树中,在最下层从最右侧起去掉相邻的若干叶子结点,得到的二叉树即为完全二叉树。如果按照上述对满二叉树结点编号的方法,对具有 n 个结点的完全二叉树中结点进行编号,那么完全二叉树中 1~ n 号结点的位置与满二叉树中 1~ n 号结点的位置是一致的。
满二叉树必为完全二叉树,而完全二叉树不一定是满二叉树。
有 n 个结点的完全二叉树的高度为 。其中“”代表取整数、去小数。
在固定结点数目的二叉树中,完全二叉树的高度是最小的。
含有 n≥1 个结点的二叉树的高度至多为 n-1;高度至少为 ⎣log n⎦。
如果对一棵有 n 个结点的完全二叉树的结点进行编号,则对任一结点 i(1≤i ≤n),有:
⑴ 如果 i=1,则结点 i 是二叉树的根,无双亲;如果 i>1,则其双亲结点 PARENT(i)是结点 ⎣i / 2⎦。
⑵ 如果 2i>n,则结点 i 无左孩子;否则其左孩子是结点 2i。
⑶ 如果 2i+1>n,则结点 i 无右孩子;否则其右孩子是结点 2i+1。
这条性质非常重要,可以参考上图观察理解。凭借此条性质,我们可以用来创建二叉树。简单描述:
1.给出赋值数组c,存放每个节点的值,注意按照顺序。
2.建立数组nodeList,存放节点。
3.按照如上性质建立每个节点之间的关系。
4.返回根节点。
这样二叉树就建立成功了。但是数组是以0开头,而我们的编号这里是以1开始,所以建树时我们的性质需要稍加改动,具体请见树(三):二叉树的建立。