树的概念
1.树的定义
树(Tree)是 n(n≥0)个有限数据元素的集合。当 n=0 时,称这棵树为空树。在一棵非
树 T 中:
(1)有一个特殊的数据元素称为树的根结点,根结点没有前驱结点;
(2)若 n>1,除根结点之外的其余数据元素被分成 m(m>0)个互不相交的集合 T 1 ,T 2 ,…,
T m ,其中每一个集合 T i (1≤i≤m)本身又是一棵树。树 T 1 ,T 2 ,…,T m 称为这个根结点的子
树。
2.相关术语
(1)结点的度:结点所拥有的子树的个数称为该结点的度。
(2)叶结点:度为 0 的结点称为叶结点,或者称为终端结点。
(3)分支结点:度不为 0 的结点称为分支结点,或者称为非终端结点。一棵树的结点除
叶结点外,其余的都是分支结点。
(4)孩子、双亲、兄弟:树中一个结点的子树的根结点称为这个结点的孩子。这个结点
称为它孩子结点的双亲。具有同一个双亲的孩子结点互称为兄弟。
(5)路径、路径长度:如果一棵树的一串结点 n 1 ,n 2 ,…,n k 有如下关系:结点 n i 是 n i+1 的
父结点(1≤i<k),就把 n 1 ,n 2 ,…,n k 称为一条由 n 1 至 n k 的路径。这条路径的长度是 k-1。
(6)祖先、子孙:在树中,如果有一条路径从结点 M 到结点 N,那么 M 就称为 N 的祖
先,而 N 称为 M 的子孙。
(7)结点的层数:树的根结点的层数为 1,其余结点的层数等于它的双亲结点的层数加
1。
(8)树的深度:树中所有结点的最大层数称为树的深度。
(9)树的度:树中各结点度的最大值称为该树的度。
(10)有序树和无序树:如果一棵树中结点的各子树从左到右是有次序的,即若交换了
某结点各子树的相对位置,则构成不同的树,称这棵树为有序树;反之,则称为无序树。
(11)森林:零棵或有限棵不相交的树的集合称为森林。自然界中树和森林是不同的概
念,但在数据结构中,树和森林只有很小的差别。任何一棵树,删去根结点就变成了森林。
2 二叉树
2.1 定义与性质
1.二叉树
二叉树(Binary Tree)是 n 个有限元素的集合,该集合或者为空、或者由一个称为根(root)
的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二
叉树为空二叉树。在二叉树中,一个元素也称作一个结点。
二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。即使树中结
点只有一棵子树,也要区分它是左子树还是右子树。
2.满二叉树与完全二叉树
(1)满二叉树
在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同
一层上,这样的一棵二叉树称作满二叉树。
(2)完全二叉树
一棵深度为 k 的有 n 个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行
编号,如果编号为 i(1≤i≤n)的结点与满二叉树中编号为 i 的结点在二叉树中的位置相同,则
这棵二叉树称为完全二叉树。完全二叉树的特点是:叶子结点只能出现在最下层和次下层,
且最下层的叶子结点集中在树的左部。显然,一棵满二叉树必定是一棵完全二叉树,而完全
二叉树未必是满二叉树。
3.二叉树的性质
性质 1 一棵非空二叉树的第 i 层上最多有 2 i-1 个结点(i≥1)。(证明略)
性质 2 一棵深度为 k 的二叉树中,最多具有 2 k -1 个结点。
证明:设第 i 层的结点数为 x i (1≤i≤k),深度为 k 的二叉树的结点数为 M,x i 最多为 2 i-1 ,
则有:
M= x i ≤ 2 i-1 =2 k -1
性质 3 对于一棵非空的二叉树,如果叶子结点数为 n 0 ,度数为 2 的结点数为 n 2 ,则有:
n 0 =n 2 +1。
证明:设 n 为二叉树的结点总数,n 1 为二叉树中度为 1 的结点数,则有:
n=n 0 +n 1 +n 2 (式 1-3-1)
在二叉树中,除根结点外,其余结点都有唯一的一个进入分支。设 B 为二叉树中的分
支数,那么有:
B=n-1 (式 1-3-2)
这些分支是由度为 1 和度为 2 的结点发出的,一个度为 1 的结点发出一个分支,一个
度为 2 的结点发出两个分支,所以有:
B=n 1 +2n 2 (式 1-3-3)
综合(式 1-3-1)、(式 1-3-2)、(式 1-3-3)式可以得到:
n 0 =n 2 +1
性质 4 具有 n 个结点的完全二叉树的深度 k 为log2(n)+1下界或log2(n+1)上界
证明:根据完全二叉树的定义和性质 2 可知,当一棵完全二叉树的深度为 k、结点个数
为 n 时,有
2 ^(k- 1) -1<n≤2 ^k -1
对不等式取对数,有
k-1≤log 2 n<k
结点是根结点,无双亲结点。
(2)如果 2i≤n,则序号为 i 的结点的左孩子结点的序号为 2i;如果 2i>n,则序号为 i 的
结点无左孩子。
(3)如果 2i+1≤n,则序号为 i 的结点的右孩子结点的序号为 2i+1;如果 2i+1>n,则
序号为 i 的结点无右孩子。
此外,若对二叉树的根结点从 0 开始编号,则相应的 i 号结点的双亲结点的编号(i-1)/2,左孩子的编号为 2i+1,右孩子的编号为 2i+2。
此性质可采用数学归纳法证明。
1.树的定义
树(Tree)是 n(n≥0)个有限数据元素的集合。当 n=0 时,称这棵树为空树。在一棵非
树 T 中:
(1)有一个特殊的数据元素称为树的根结点,根结点没有前驱结点;
(2)若 n>1,除根结点之外的其余数据元素被分成 m(m>0)个互不相交的集合 T 1 ,T 2 ,…,
T m ,其中每一个集合 T i (1≤i≤m)本身又是一棵树。树 T 1 ,T 2 ,…,T m 称为这个根结点的子
树。
2.相关术语
(1)结点的度:结点所拥有的子树的个数称为该结点的度。
(2)叶结点:度为 0 的结点称为叶结点,或者称为终端结点。
(3)分支结点:度不为 0 的结点称为分支结点,或者称为非终端结点。一棵树的结点除
叶结点外,其余的都是分支结点。
(4)孩子、双亲、兄弟:树中一个结点的子树的根结点称为这个结点的孩子。这个结点
称为它孩子结点的双亲。具有同一个双亲的孩子结点互称为兄弟。
(5)路径、路径长度:如果一棵树的一串结点 n 1 ,n 2 ,…,n k 有如下关系:结点 n i 是 n i+1 的
父结点(1≤i<k),就把 n 1 ,n 2 ,…,n k 称为一条由 n 1 至 n k 的路径。这条路径的长度是 k-1。
(6)祖先、子孙:在树中,如果有一条路径从结点 M 到结点 N,那么 M 就称为 N 的祖
先,而 N 称为 M 的子孙。
(7)结点的层数:树的根结点的层数为 1,其余结点的层数等于它的双亲结点的层数加
1。
(8)树的深度:树中所有结点的最大层数称为树的深度。
(9)树的度:树中各结点度的最大值称为该树的度。
(10)有序树和无序树:如果一棵树中结点的各子树从左到右是有次序的,即若交换了
某结点各子树的相对位置,则构成不同的树,称这棵树为有序树;反之,则称为无序树。
(11)森林:零棵或有限棵不相交的树的集合称为森林。自然界中树和森林是不同的概
念,但在数据结构中,树和森林只有很小的差别。任何一棵树,删去根结点就变成了森林。
2 二叉树
2.1 定义与性质
1.二叉树
二叉树(Binary Tree)是 n 个有限元素的集合,该集合或者为空、或者由一个称为根(root)
的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成。当集合为空时,称该二
叉树为空二叉树。在二叉树中,一个元素也称作一个结点。
二叉树是有序的,即若将其左、右子树颠倒,就成为另一棵不同的二叉树。即使树中结
点只有一棵子树,也要区分它是左子树还是右子树。
2.满二叉树与完全二叉树
(1)满二叉树
在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同
一层上,这样的一棵二叉树称作满二叉树。
(2)完全二叉树
一棵深度为 k 的有 n 个结点的二叉树,对树中的结点按从上至下、从左到右的顺序进行
编号,如果编号为 i(1≤i≤n)的结点与满二叉树中编号为 i 的结点在二叉树中的位置相同,则
这棵二叉树称为完全二叉树。完全二叉树的特点是:叶子结点只能出现在最下层和次下层,
且最下层的叶子结点集中在树的左部。显然,一棵满二叉树必定是一棵完全二叉树,而完全
二叉树未必是满二叉树。
3.二叉树的性质
性质 1 一棵非空二叉树的第 i 层上最多有 2 i-1 个结点(i≥1)。(证明略)
性质 2 一棵深度为 k 的二叉树中,最多具有 2 k -1 个结点。
证明:设第 i 层的结点数为 x i (1≤i≤k),深度为 k 的二叉树的结点数为 M,x i 最多为 2 i-1 ,
则有:
M= x i ≤ 2 i-1 =2 k -1
性质 3 对于一棵非空的二叉树,如果叶子结点数为 n 0 ,度数为 2 的结点数为 n 2 ,则有:
n 0 =n 2 +1。
证明:设 n 为二叉树的结点总数,n 1 为二叉树中度为 1 的结点数,则有:
n=n 0 +n 1 +n 2 (式 1-3-1)
在二叉树中,除根结点外,其余结点都有唯一的一个进入分支。设 B 为二叉树中的分
支数,那么有:
B=n-1 (式 1-3-2)
这些分支是由度为 1 和度为 2 的结点发出的,一个度为 1 的结点发出一个分支,一个
度为 2 的结点发出两个分支,所以有:
B=n 1 +2n 2 (式 1-3-3)
综合(式 1-3-1)、(式 1-3-2)、(式 1-3-3)式可以得到:
n 0 =n 2 +1
性质 4 具有 n 个结点的完全二叉树的深度 k 为log2(n)+1下界或log2(n+1)上界
证明:根据完全二叉树的定义和性质 2 可知,当一棵完全二叉树的深度为 k、结点个数
为 n 时,有
2 ^(k- 1) -1<n≤2 ^k -1
对不等式取对数,有
k-1≤log 2 n<k
k 是整数,所以有 k=log2(n)+1下界
性质 5 对于具有 n 个结点的完全二叉树,如果按照从上至下和从左到右的顺序对二叉树中的所有结点从 1 开始顺序编号,则对于任意的序号为 i 的结点,有:
(1)如果 i>1,则序号为 i 的结点的双亲结点的序号为 i/2 ;如果 i=1,则序号为 i 的结点是根结点,无双亲结点。
(2)如果 2i≤n,则序号为 i 的结点的左孩子结点的序号为 2i;如果 2i>n,则序号为 i 的
结点无左孩子。
(3)如果 2i+1≤n,则序号为 i 的结点的右孩子结点的序号为 2i+1;如果 2i+1>n,则
序号为 i 的结点无右孩子。
此外,若对二叉树的根结点从 0 开始编号,则相应的 i 号结点的双亲结点的编号(i-1)/2,左孩子的编号为 2i+1,右孩子的编号为 2i+2。
此性质可采用数学归纳法证明。