树的基本概念
树是N ( N ≥ 1 N\geq1 N≥1) 个结点的有限集合,N=0时,称为空树,这是一种特殊情况。在任意一颗非空树中应满足:
- 当且仅有一个特定的称为根的结点
- 当 N>1时,其余结点可分为m(m>0)个互不相交的有限集合 T 1 T_1 T1, T 2 T_2 T2, ⋯ \cdots ⋯ T n T_n Tn,其中每一个集合本身又是一棵树,并且称为根节点的子树。
-
考虑结点K。根A到结点K的唯一路径上的任意结点,称为结点K的祖先结点。如结点B是结点K的祖先结点,而结点K是结点B的子孙结点。路径上最接近结点K的结点E称为K的双亲结点,而K为E的孩子结点。根A是树中唯一没有双亲的结点。有相同的双亲的结点称为兄弟结点,如结点K和结点L有相同的双亲结点E,即K和L为兄弟结点。
-
树中一个结点的子节点个数称为结点的度,树中结点的最大度数称为树的度。如结点B的度为2,结点D的度为3,树的度为3。
-
度大于0的结点称为分支节点(又称为非终端结点);度为0(没有子女结点)的结点称为叶子节点(又称终端结点)。在分支节点中,每个结点的分支树就是该结点的度。
-
结点的层次从根开始定义,根节点为第1层,它的子节点为第2层,以此类推。
层的深度从根节点开始自顶向下逐层累加的。
结点的高度是从叶节点开始自底向上逐层累加的。
树的高度(又称深度)是树中结点的最大层数。如图中树的高度为4。 -
有序树和无序树:树中结点的子树从做到右是有次序的,不能交换,这样的树叫做有序树,在有序树中,一个结点其子节点按从左到右顺序出现时有关联的,反之则称为无序树。
-
路径和路径长度:树中两个结点之间的路径时由这两个结点之间所经过的结点序列构成的,而路径长度时路径上所经过的边的个数。结点A和结点K的路径长度为3,中间经过结点B和结点E。
-
森林:森林时m( m ≥ 0 m\geq0 m≥0)棵互不相交的树的集合。森林的概念与树的概念十分接近,因为只要把树的根节点删除就成了森林。反之,只要给n棵独立的树加上一个结点,并把这n棵树作为该节点的子树,则森林就变成了树。
树的性质
- 树中的节点数等于所有结点的度数加1。
注:所有结点的度数加上1个根节点。 - 度为m的树中第i层上至多有
m
i
−
1
m^{i-1}
mi−1个结点(
i
≥
1
i\geq1
i≥1)。
注:最多情况下 :1–> 2 0 2^0 20 2–> 2 1 2^1 21 3–> 2 2 2^2 22 ⋯ \cdots ⋯ i --> 2 i − 1 2^{i-1} 2i−1 - 高度为h的m叉树至多有
(
m
h
−
1
)
/
(
m
−
1
)
(m^h-1)/(m-1)
(mh−1)/(m−1)个结点。
注:每层分支最多的情况下 : N = m 0 + m 1 + m 2 + ⋯ + m h − 1 N=m^0+m^1+m^2+\cdots+m^{h-1} N=m0+m1+m2+⋯+mh−1,然后等比数列求和得 ( m h − 1 ) / ( m − 1 ) (m^h-1)/(m-1) (mh−1)/(m−1)。 - 具有n个结点的m叉树的最小高度为
⌈
l
o
g
m
(
n
(
m
−
1
)
+
1
)
⌉
\lceil log_m(n(m-1)+1) \rceil
⌈logm(n(m−1)+1)⌉。(
⌈
x
⌉
\lceil x \rceil
⌈x⌉对x向上取整)。
注: ( m h − 1 ) / ( m − 1 ) = n (m^h-1)/(m-1)=n (mh−1)/(m−1)=n 求得 h = l o g m ( n ( m − 1 ) + 1 ) h=log_m(n(m-1)+1) h=logm(n(m−1)+1),如果不为整数,层数加1。
二叉树的概念
二叉树是另外一种树形结构,其特点是每个结点至多只有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。
二叉树的基本形态:
- 空树
- 只有一个根节点
- 根节点只有左子树
- 根节点只有右子树
- 根节点既有左子树又有右子树
满二叉树:一颗高度为h,并且含有
2
h
−
1
2^h-1
2h−1个结点的二叉树称为满二叉树,即树中的每一层都含有最多的结点。满二叉树的子节点都集中在二叉树的最下一层,并且除了叶子节点之外的每个结点度数均为2。
可以对满二叉树按层序编号:约定编号从根节点(根节点编号为1)起,自上而下,自左向右。这样每个结点对应一个编号,对于编号为
i
i
i的结点,如果有双亲,其双亲为
⌊
i
/
2
⌋
\lfloor i/2 \rfloor
⌊i/2⌋,如果有左孩子,则左孩子为
2
i
2i
2i;如果有有孩子,则右孩子为
2
i
+
1
2i+1
2i+1。
完全二叉树:设一个高度为h,有n个结点的二叉树,当且仅当其每一个结点都与高度为h的满二叉树中编号为 1~n 的结点一一对应时,称为完全二叉树。
特点:
- 若 i ≥ ⌊ n / 2 ⌋ i\geq\lfloor n/2 \rfloor i≥⌊n/2⌋,则结点 i i i为分支节点,否则为叶节点。
- 叶子节点只可能在层次最大的两层出现。对于最大层次的叶子节点,都依次排列在该层的最左边的位置。
- 如果有度为1的结点,只可能有一个,且该节点只有左孩子没有右孩子。(重要特征)
- 按层序编号后,一旦出现某节点(其编号为 i i i)为叶子节点或只有左孩子,则编号大于 i i i的结点均为叶子节点。
- 若 n n n为奇数,则每个分支结点都有左子女和右子女;若 n n n为偶数,则编号最大的分支节点(编号为 n / 2 n/2 n/2)只有左子女,没有右子女,其余分支节点左、右子女都有。
二叉排序树:一颗二叉树或者是空二叉树,或者是具有如下性质的二叉树:左子树上所有结点的关键字均小于根节点的关键字;右子树的所有结点的关键字均大于根节点的关键字。左子树和右子树又各是一颗二叉排序树。
平衡二叉树:树上任一结点的左子树和右子树的深度之差不超过1。
二叉树的性质
-
非空二叉树上叶子节点树等于度为2的节点数加1,即 N 0 = N 2 + 1 N_0=N_2+1 N0=N2+1
注:设度为0、1、2的节点数分别为 N 0 、 N 1 、 N 2 N_0、N_1、N_2 N0、N1、N2,结点总数 N = N 0 + N 1 + N 2 N=N_0+N_1+N_2 N=N0+N1+N2。
设 B B B为分支总数,则 N = B + 1 N=B+1 N=B+1。由于这些分支是由度为1和2的结点射出来的,所有又有 B = N 1 + N 2 B=N_1+N_2 B=N1+N2。
于是得: N 0 + N 1 + N 2 = N 1 + 2 N 2 + 1 N_0+N_1+N_2=N_1+2N_2+1 N0+N1+N2=N1+2N2+1,所以 N 0 = N 2 + 1 N_0=N_2+1 N0=N2+1。 -
非空二叉树上的第 K K K层上至多有 2 k − 1 2^{k-1} 2k−1个结点( K ≥ 1 K\geq1 K≥1)。
-
高度为 H H H的二叉树至多有 2 H − 1 2^{H-1} 2H−1个结点( H ≥ 1 H\geq1 H≥1)。
-
对完全二叉树按从上到下、从左到右的顺序依次编号 1 , 2 , ⋯ , N 1,2,\cdots,N 1,2,⋯,N,则有以下关系:
1)当i>1时,结点 i 的双亲结点编号为 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor ⌊i/2⌋,即当 i 为偶数时,其双亲结点的编号为 i/2,它是双亲结点的左孩子;当i为奇数时,其双亲结点的编号为 ( i − 1 ) / 2 (i-1)/2 (i−1)/2,它是双亲结点的右孩子。
2)当 2 i ≤ N 2i\leq N 2i≤N时,结点i的左孩子编号为2i,否则为左孩子。
3)当 2 i + 1 ≤ N 2i+1\leq N 2i+1≤N时,结点i的有孩子编号为2i+1,否则无右孩子。
4)结点i所在层次(深度)为 ⌊ l o g 2 i ⌋ + 1 \lfloor log_2i \rfloor+1 ⌊log2i⌋+1。 -
具有N个(N>0)结点的完全二叉树的高度为 ⌈ l o g 2 ( N + 1 ) ⌉ \lceil log_2(N+1) \rceil ⌈log2(N+1)⌉或 ⌊ l o g 2 N ⌋ + 1 \lfloor log_2N \rfloor+1 ⌊log2N⌋+1。