5.1 树的基本概念
定义
在任意一棵非空树中应满足:
1)有且仅有一个特定的称为根的结点。
2)当 n > 1 n>1 n>1时,其余节点可分为 m m m个互不相交的有限集 T 1 T 2 . . . T m T_1T_2...T_m T1T2...Tm,其中每个集合本身又是一棵树,称为根的子树。
特点
树是一种递归的数据结构。
1)树的根结点没有前驱,除根节点外的所有结点有且只有一个前驱。
2)树中所有结点可以有零个或多个后继。
树适合表示有层次的数据结构,某个结点(除根节点外)最多只和其父节点有直接关系。
基本术语
结点的度:一个结点的孩子个数称为该结点的度。
树的度:树中结点的最大度数。
层次:从树根开始定义,根节点为第1层。
深度:从根节点开始自顶向下逐层累加。
高度:从叶结点开始自底向上逐层累加。
树的高度(或深度):树中结点的最大层数。
树的路径长度:树根到每个结点的路径长度的总和。
树的性质
1)树中的结点数等于所有结点的度数加1
2)度为 m m m的树中第 i i i层上至多有 m i − 1 m^{i-1} mi−1个结点
3)高度为 h h h的 m m m叉树至多有 ( m h − 1 ) ( m − 1 ) (m^h-1)(m-1) (mh−1)(m−1)个结点
4)具有 n n n个结点的 m m m叉树的最小高度为 ⌈ l o g m ( n ( m − 1 ) + 1 ) ⌉ \lceil log_m(n(m-1)+1)\rceil ⌈logm(n(m−1)+1)⌉, n ( m − 1 ) n(m-1) n(m−1)为假设每层都有m-1个分支时的情况。
习题5.1
-
树的度为n,结点数为x,求最小高度h
求最小高度则树一定是完全n叉树,即每个结点的度数都为n,因此树的最小高度为 ⌈ l o g n ( 2 x + 1 ) ⌉ \lceil log_n(2x+1) \rceil ⌈logn(2x+1)⌉ -
树的度为x,至少有几个结点?
树高h+x-1个结点(从根到h-1层都只有1个结点,最后一层有x个结点) -
树的高度为h,度为x,至多有几个结点?
完全x叉树,最多有 1 + x + x 2 + . . . + x h − 1 1+x+x^2+...+x^{h-1} 1+x+x2+...+xh−1 -
树的度为n,求叶结点
按照条件求出总结点树-非叶结点树 -
总结点数= n 0 + n 1 + . . . + n m n_0+n_1+...+n_m n0+n1+...+nm
-
总分支数= 1 n 1 + 2 n 2 + . . . + m n m 1n_1+2n_2+...+mn_m 1n1+2n2+...+mnm
-
总结点数= 总 分 枝 数 + 1 总分枝数+1 总分枝数+1
简答题
-
含有n个结点的三叉树的最小高度是多少?
最小高度的三叉树一定是完全三叉树,即每个结点的度都为3,设最小高度为h,则有 1 + 3 + 3 2 + . . . + 3 h − 2 < n ≤ 1 + 3 + 3 2 + . . . + 3 h − 1 1+3+3^2+...+3^{h-2}<n≤1+3+3^2+...+3^{h-1} 1+3+32+...+3h−2<n≤1+3+32+...+3h−1,即 ( 3 h − 1 − 1 ) / 2 < n ≤ ( 3 h − 1 ) / 2 (3^{h-1}-1)/2<n≤(3^{h}-1)/2 (3h−1−1)/2<n≤(3h−1)/2,得 3 h − 1 < 2 n + 1 ≤ 3 h 3^{h-1}<2n+1≤3^h 3h−1<2n+1≤3h, h ≥ l o g 3 ( 2 n + 1 ) h≥log_3(2n+1) h≥log3(2n+1),因此h为 ⌈ l o g 3 ( 2 n + 1 ) ⌉ \lceil log_3(2n+1) \rceil ⌈log3(2n+1)⌉ -
已知一棵度为4的树中,度为0,1,2,3的结点数分别为14,4,3,2,求该树的结点总数和度为4的结点个数,并给出推导过程。
设树中度为 i i i的结点数分别为 n i n_i ni,树中结点总数为 n n n,则 n = 分 支 数 + 1 n=分支数+1 n=分支数+1,而分支数等于树中各结点的度之和,因此 n = 1 + n 1 + 2 n 2 + 3 n 3 + 4 n 4 = n 0 + n 1 + n 2 + n 3 + n 4 n=1+n_1+2n_2+3n_3+4n_4=n_0+n_1+n_2+n_3+n_4 n=1+n1+2n2+3n3+4n4=n0+n1+n2+n3+n4
由上式得, 1 + 4 + 3 ∗ 2 + 2 ∗ 3 + 4 n 4 = 14 + 4 + 3 + 2 + n 4 1+4+3*2+2*3+4n_4=14+4+3+2+n_4 1+4+3∗2+2∗3+4n4=14+4+3+2+n4,得 n 4 = 2 n_4=2 n4=2,因此度为4的结点数为2,共有25个结点。 -
已知一棵度为m的树中,有 n 1 n_1 n1个度为1的结点,有 n 2 n_2 n2个度为2的结点……有 n m n_m nm个度为m的结点,问该树有多少个叶结点?
1 + n 1 + 2 n 2 + . . . + m n m − ( n 1 + n 2 + . . . + n m ) = ∑ i = 2 m ( i − 1 ) n i 1+n_1+2n_2+...+mn_m-(n_1+n_2+...+n_m)=\sum_{i=2}^m(i-1)n_i 1+n1+2n2+...+mnm−(n1+n2+...+nm)=∑i=2m(i−1)ni
5.2
二叉树的定义及其主要特性
定义
二叉树:每个结点至多有两颗子树(即二叉树中不存在度大于2的结点),分左右子树,不能颠倒次序。
二叉树是有序树,其基本形态如图。
特殊的二叉树
满二叉树
高度为 h h h,含有 2 h − 1 2^h-1 2h−1个结点的二叉树。
对二叉树按层序编号:根节点编号为1,从根节点自上而下,自左而右。
对编号为 i i i的结点,其双亲为 ⌊ i / 2 ⌋ \lfloor i/2 \rfloor ⌊i/2⌋,若有左孩子,则左孩子为 2 i 2i 2i;若有右孩子,则右孩子为 2 i + 1 2i+1 2i+1。
完全二叉树
高度为 h h h,含有 n n n个结点的二叉树,当且仅当其每个结点都与高度为 h h h的满二叉树中编号为1~n的结点一一对应时,称为完全二叉树。
- 若 i ≤ ⌊ n / 2 ⌋ i≤\lfloor n/2 \rfloor i≤⌊n/2⌋,则结点 i i i为分支结点,否则为叶子结点。
- 叶子结点只可能在层次最大的两层上出现。最大层次中的叶子结点都依次怕lie在该层最左边的位置上。
- 若有度为1的结点,则只可能有一个,且该节点只有左孩子而无右孩子。
- 按层序编号后,一旦出现某结点 i i i为叶子结点或只有左孩子,则编号大于 i i i的结点均为叶结点。
- 若n为奇数,则每个分支都有左、右孩子;若n为偶数,则编号最大的分支结点 n / 2 n/2 n/2只有左孩子,没有右孩子。
二叉排序树
左子树上所有结点的值均小于根节点的值;右子树上的所有结点的值均大于根节点的值;左右子树又各是一棵二叉排序树。
平衡二叉树
树上任一结点的左子树和右子树的深度之差不超过1.
二叉树的性质
- 非空二叉树的叶子结点数等于度为2的结点数+1,即 n 0