完全二叉树:除最后一层外,每一层上的结点数均达到最大值;在最后一层上只缺少右边
的若干结点。
*:根据完全二叉树的定义可得出:度为 1 的结点的个数为 0 或 1。
下图 a 表示的是满二叉树,下图 b 表示的是完全二叉树:
完全二叉树还具有如下两个特性:
性质 5 具有 n 个结点的完全二叉树深度为 。
性质 6 设完全二叉树共有 n 个结点,如果从根结点开始,按层序(每一层从左到右)用自
然数 1,2,…,n 给结点进行编号,则对于编号为 k(k=1,2,…,n)的结点有以下结
论:
① 若 k=1,则该结点为根结点,它没有父结点;若 k>1,则该结点的父结点的编号为
INT(k/2)。
② 若 2k≤n,则编号为 k 的左子结点编号为 2k;否则该结点无左子结点(显然也没有右子
结点)。
③ 若 2k+1≤n,则编号为 k 的右子结点编号为 2k+1;否则该结点无右子结点。
4、二叉树的存储结构
在计算机中,二叉树通常采用链式存储结构。
与线性链表类似,用于存储二叉树中各元素的存储结点也由两部分组成:数据域和指针域。
但在二叉树中,由于每一个元素可以有两个后件(即两个子结点),因此,用于存储二叉
树的存储结点的指针域有两个:一个用于指向该结点的左子结点的存储地址,称为左指针
域;另一个用于指向该结点的右子结点的存储地址,称为右指针域。
*:一般二叉树通常采用链式存储结构,对于满二叉树与完全二叉树来说,可以按层序进行
顺序存储。
5、二叉树的遍历(学吧学吧独家稿件)
二叉树的遍历是指不重复地访问二叉树中的所有结点。二叉树的遍历可以分为以下三种:
(1)前序遍历(DLR):若二叉树为空,则结束返回。否则:首先访问根结点,然后遍
历左子树,最后遍历右子树;并且,在遍历左右子树时,仍然先访问根结点,然后遍历左
子树,最后遍历右子树。
(2)中序遍历(LDR):若二叉树为空,则结束返回。否则:首先遍历左子树,然后访
问根结点,最后遍历右子树;并且,在遍历左、右子树时,仍然先遍历左子树,然后访问
根结点,最后遍历右子树。
(3)后序遍历(LRD):若二叉树为空,则结束返回。否则:首先遍历左子树,然后遍
历右子树,最后访问根结点,并且,在遍历左、右子树时,仍然先遍历左子树,然后遍历
右子树,最后访问根结点。
1.7 查找技术(学吧学吧独家稿件)
4