1 树的基本概念
1.1 树的定义
树是n(n>=0)个节点的有限集。当n=0时,称为空树。在任意一棵非空树中应满足:
1、有且仅有一个特定的节点称为根。
2、当n>1时,其余节点可分为m(m>0)个互不相交的有限集,其中每个集合本身又是一棵树,并且称为根的子树。
显然,树的定义是递归的,即在树的定义中又用到了自身,树是一种递归的数据结构。树作为一种逻辑结构,同时也是一种分层结构,具有以下两个特点:
1、树的根节点没有前驱,除根节点外的所有节点有且仅有一个前驱。
2、树的所有节点可以有0个或多个后继。
因此n个节点的树有n-1条边。
1.2 基本术语
1.考虑节点L。根A到节点L的唯一路径的任意节点,称为节点L的祖先。如节点B是节点L的祖先,而节点L是节点B的子孙。路径上最接近节点L的节点E称为L的双亲,而L为节点E的 孩子。由相同双亲的节点,称为兄弟,如节点K和节点L由相同的双亲E,即K和L为兄弟。
2.树中一个节点孩子的个数称为该结点的度 ,树中结点的最大度数称为树的度。如节点B的度为2,结点D的度数为3,树的度为3。
3.度大于0的结点称为分支节点(非终端节点);度为0 (没有子女结点)的结点称为叶子结点(终端节点)。在分支节点中,每个结点的分支数就是该节点的度。
4.结点的深度、高度和层次。
结点的层次从树根的定义,根节点为第1层,它的子节点为第2层,以此类推。双亲在同一层的结点互为堂兄弟。
结点的深度从根节点开始自根向下逐层累加,结点的高度从叶结点开始自下向上逐层累加。树的高度(或深度)是树中结点的最大层数。图中树的高度为4。
5.有序数和无序树
6.路径和路径长度。树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成,而路径长度是路径上所经过的边的个数。
7.森林
1.3 树的性质
树具有如下最基本的性质:
(1)树的结点数n等于所有结点的度数加1。
我们知道结点的度是指该节点的孩子的数量,每个结点与其每个孩子都由唯一的边相连,因此树中所有结点的度数之和等于树中的边数之和。树中的结点(除根外)都有唯一的双亲,因此结点数n等于边数之和加1,即所有结点的度数加1。
(2)度为m的树中第i层上至多有个结点(i>=1)。
(3)高度为h的m叉树中至多有
当各层结点数达到最大时,树中至多有个结点。
2 二叉树
2.1 二叉树的基本概念
2.1.1 二叉树的定义
二叉树是一种特殊的树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒。与树相似,二叉树也以递归的形式定义。二叉树是n(n>=0)个结点的有限集合:
(1)或者为空二叉树,即n=0。
(2)或者由一个根节点和互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树。
下图为二叉树的几种形态:
二叉树是有序树,若将其左、右颠倒,则成为另外一棵不同的二叉树。即使树中结点只有一棵子树,也要区分它是左子树还是右子树。
二叉树和度为2的有序树的区别:
(1)度为2的树至少有3个节点,而二叉树可以为空。
(2)度为2的有序树的孩子的左右次序是相对于另一个孩子而言的,若某个结点只有一个孩子,则这个孩子就无需区分左右次序,而二叉树无论孩子数是否为2,均需确定左右次序,即二叉树的结点次序不是相对另一个结点而言的,而是确定的。
2.2.2 几种特殊形态的二叉树
满二叉树和完全二叉树是两种特殊形态的二叉树。
(1)满二叉树。一棵高度为h,且有的结点称为满二叉树,即二叉树中每层都含有最多的结点。如下图所示。满二叉树的叶结点都集中在二叉树的最下一层,并且除叶结点外每个结点的度数为2。换句话说,如果一棵二叉树的任何结点,或者是树叶,或者左右子树均非空,那么这棵树也就是满二叉树。
(2)完全二叉树。高度为h、有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树的编号为1~的结点一一对应时,称为完全二叉树。如上图所示。同样地,如果一棵二叉树最多只有最下面一层的结点都集中在左边位置上,这样的定义也是完全二叉树。
完全二叉树 的特点是其叶结点只可能在此层次最大的两层出现。完全二叉树中由根节点到各个结点的路径长度总和在具有同样结点个数的二叉树中达到最小,即任意一棵二叉树中根节点到各结点的最长路径一定不短于结点数目相同的完全二叉树 。
(3)二叉排序树。左子树上所有结点的关键字均小于右子树上的关键字;右子树上的关键字均大于根节点上的关键字;左子树和右子树又是一棵二叉排序树。
(4)平衡二叉树。树中任意一个结点的左子树和右子树的高度之差不超过1。
(5)扩充二叉树。在二叉树中出现空子树的位置增加空树叶,所形成的树称为扩充二叉树。如下图所示。从扩充二叉树的根到每个外部结点的路径长度之和称为外部路径长度(E)。扩充二叉树的根到每个内部结点的路径长度之和称为内部路径长度(I)。
可以证明:E = I + 2*n (n为内部结点个数)
2.2.3 二叉树的性质
性质1. 在二叉树中,第i 层最多有个结点(i>=0)。
性质2. 深度为k的二叉树至多有个结点(k>=1)。
性质3. 任