树和二叉树学习要点

概述

树结构是非常重要的一种非线性结构,具有严格的层次特征,是本课程的重点和难点。本章的内容由树和二叉树两部分组成,并且以二叉链表存储结构为媒介,实现了树和二叉树之间的转换,本章知识点的组织结构如下图所示:
在这里插入图片描述
在这里插入图片描述
当然还有森林、树、二叉树之间的转化问题。

重点/难点/要点

本章的重点是:

  1. 二叉树的性质;
  2. 二叉树和树的存储表示;
  3. 二叉树的遍历及算法实现;
  4. 树与二叉树的转换关系;
  5. 哈夫曼树及应用。

本章的难点是:

  1. 二叉树遍历算法的非递归实现;
  2. 基于二叉树的遍历实现二叉树的其他操作;
  3. 树的基本操作的实现。

树学习要点
对于树要抓住一条明线:树的逻辑结构一树的存储结构,一个重点:树的遍历操作(三种)。
对于树的逻辑结构,要从树的定义出发,在与线性表定义进行比较的基础上,把握要点理解树的定义及其逻辑特征,通过具体实例理解树的基本术语,从逻辑上理解树的遍历操作,最后给出树的抽象数据类型定义。
对于树的存储结构,要以如何表示树中结点之间的逻辑关系为出发点,掌握树的不同存储方法以及它们之间的关系。

二叉树学习要点
对于二叉树要抓住一条明线:二叉树的逻辑结构一二叉树的存储结构→二叉树的实现,一个重点:二叉树的遍历操作(四种)及其实现。
对于二叉树的逻辑结构,要从二叉树的定义出发,在与树的定义进行比较的基础上,理解树和二叉树是两种树结构,通过二叉树的性质加深对二叉树逻辑结构的理解,从逻辑上掌握二叉树的遍历方法,最后给出二叉树的抽象数据类型定义。
对于二叉树的存储结构,要从二叉树的逻辑特征和基本性质出发,掌握二叉树的不同存储方法以及它们之间的关系,基于二叉链表存储结构讨论二叉树遍历操作的实现。

知识点整理

  1. 树是 n ( n ≥ 0 ) n(n\geq0) n(n0)个结点的有限集合。任意一棵非空树满足:
    ①有且仅有一个特定的称为根的结点;
    ②当 n > 1 n>1 n>1时,除根结点之外的其余结点被分成 m ( m > 0 ) m(m>0) m(m>0)个互不相交的有限集合 T 1 , T 2 , ⋯   , T m T_1,T_2,\cdots ,T_m T1,T2,,Tm,其中每个集合又是一棵树,并称为这个根结点的子树。
  2. 某结点所拥有的子树的个数称为该结点的度;树中各结点度的最大值称为该树的度。度为0的结点称为叶子结点;度不为0的结点称为分支结点。某结点的子树的根结点称为该结点的孩子结点;反之,该结点称为其孩子结点的双亲结点。规定根结点的层数为1,对其余任何结点,若某结点在第k层,则其孩子结点在第k+1层;树中所有结点的最大层数称为树的深度。 m ( m ≥ 0 ) m(m\ge0) m(m0)棵互不相交的树的集合构成森林。
  3. 树的遍历是指从根结点出发,按照某种次序访问树中所有结点,使得每个结点被访问一次且仅被访问一次。通常有前序遍历、后序遍历和层序遍历三种方式。
  4. 树的存储结构有双亲表示法、孩子表示法、孩子双亲表示法、孩子兄弟表示法。
  5. 二叉树是 n ( n ≥ 0 ) n(n\geq0) n(n0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
  6. 二叉树和树是两种树结构,二叉树不是度为2的树。
  7. 二叉树具有下列性质:
    ①二叉树的第 i i i层上最多有 2 i − 1 2^{i-1} 2i1个结点( i ≥ 1 i≥1 i1);
    ②一棵深度为k的二叉树中,最多有 2 k − 1 2^{k}-1 2k1个结点,最少有k个结点;
    ③在一棵二叉树中,如果叶子结点的个数为 n 0 n_0 n0,度为2的结点个数为 n 2 n_2 n2,则 n 0 = n 2 + 1 n_0=n_2+1 n0=n2+1
  8. 完全二叉树具有下列性质:
    ①具有n个结点的完全二叉树的深度为 ⌊ log ⁡ 2 n ⌋ + 1 \lfloor \log_2n\rfloor+1 log2n+1
    ②对一棵具有 n n n个结点的完全二叉树中的结点从1开始按层序编号,则对于任意的编号为 i ( 1 ≤ i ≤ n ) i(1≤i≤n) i(1in)的结点(简称为结点 i i i),有:
    ■如果 i > 1 i>1 i>1,则结点i的双亲的编号为 ⌊ i / 2 ⌋ \lfloor i/2\rfloor i/2,否则结点 i i i是根结点,无双亲;
    ■如果 2 i ≤ n 2i\leq n 2in,则结点 i i i的左孩子的编号为 2 i 2i 2i,否则结点 i i i无左孩子;
    ■如果 2 i + 1 ≤ n 2i+1≤n 2i+1n,则结点 i i i的右孩子的编号为 2 i + 1 2i+1 2i+1,否则结点 i i i无右孩子。
  9. 二叉树的遍历方式通常有前序遍历、中序遍历、后序遍历和层序遍历。
  10. 已知一棵二叉树的前序序列和中序序列,或者中序序列和后序序列,可以唯一确定这棵二叉树;但是,已知二叉树的前序序列和后序序列,不能唯一确定一棵二叉树。
  11. 二叉树的顺序存储结构一般仅适合于存储完全二叉树。
  12. 二叉树最常用的存储结构是二叉链表,此外,还有三叉链表、线索链表等。
  13. 树和二叉树之间具有一 一对应的关系,可以相互转换。
  14. 哈夫曼树是带权路径长度最小的二叉树,对给定的n个权值构造的哈夫曼树中,有 n n n个叶子结点, n − 1 n-1 n1个分支结点。
  15. 采用哈夫曼树构造的编码是一种能使字符串的编码总长度最短的不等长编码,并且哈夫曼编码是前缀编码。

练习

树的逻辑结构
在树中没有回路,其根本原因在于(A)。
A.子树互不相交 B.树是一种层次结构 C.树的定义是递归的 D.树只有一个根结点
在树结构中,逻辑关系体现为兄弟之间的关系。(×)
在树结构中,路经有时不唯一。(×)
在树结构中,根结点只有一个,但是一定有多个叶子结点。(×)
在树的前序遍历序列中,任意一个结点均处在其子女的前面。(√)

树的存储结构
实现树的存储结构,关键是如何存储结点的双亲或孩子。(√)
树的双亲表示法可以按任意次序存储结点的数据信息。(√)
在树的双亲表示法中,查找某结点的孩子结点,平均情况下的时间复杂度是O(n)。(√)
在树的孩子表示法中,查找某结点的双亲结点,平均情况下的时间复杂度是O(n)。(×)
树的孩子兄弟表示法是一种链接存储结构。(√)

二叉树的逻辑结构
二叉树是度小于或等于2的树。(×)还要分左右
二叉树是最简单的二叉树。(√)
深度为k且有k个结点的二叉树一定是斜树。(×)可以是霹雳形状
如果所有结点或者为叶子,或者都存在左右子树,则一定是满二叉树。(×)要在同一层
在同样结点个数的二叉树中,完全二叉树的深度最小。(√)
二叉树的第3层上最多有6个结点。(×)
一棵二叉树有10个叶子结点,则度为2的结点一定有(B)个。
A.8 B.9 C.12 D.不确定
对完全二叉树按层序从1开始编号,则结点5的左孩子是(B),右孩子是(A)。
A.11 B.10 C.9 D.8
如下图所示二叉树的前序遍历序列是(B),中序遍历序列是(C),后序遍历序列是(E),层序遍历序列是(A)。
A.(A,B,C,D,E,F,G)
B.(A,B,D,G,C,E,F)
C.(D,G,B,A,E,C,F)
D.(G,D,B,A,E,C,F)
E.(G,D,B,E,F,C,A)
F.(D,G,B,E,F,C,A)
在这里插入图片描述

二叉树的存储结构
对于二叉树的顺序存储,是用一维数组按前序遍历存储结点。(×)
二叉树的顺序存储一般仅用于存储完全二叉树。(√)
在二叉链表中,叶子结点的左右孩子指针均为空指针。(√)
在n个结点的二叉链表中有n+1个空指针,降低了空间利用率,因此,通常不用二叉链表存储二叉树。(×)
5.在二叉链表中查找某结点的双亲结点,平均情况下的时间复杂度是O(n)。(√)
如上图5-4所示二叉树,其扩展二叉树的前序遍历序列是(C)。
A.(ABD#G##CEF#####)
B.(AB DG####CEF####)
C.(ABD#G###CE##F##)
D.(AB#D#G##CE##F##)


扩充(展)二叉树是二叉树中的一种,是指在二叉树中出现空子树的位置增加空树叶,所形成的二叉树。
由于先序、中序和后序序列中的任一个都不能唯一确定一棵二叉树,所以对二叉树做如下处理,将二叉树的空结点用·补齐,如图所示。我们把这样处理后的二叉树称为原二叉树的扩展二叉树,扩展二叉树的先序和后序序列能唯一确定其二叉树。
在这里插入图片描述



由树转换成二叉树,其根结点的右子树总是空的。(√)
树转换为二叉树后,树中的兄弟关系在二叉树中是(B)关系,树中的双亲和长子关系在二又树中是(A)关系。
A.双亲和左孩子 B.双亲和右孩子 C.兄弟 D.祖先
树的前序遍历序列等价于二叉树的前序遍历序列,树的后序遍历序列等价于二叉树的后序遍历序列。()
二叉树转换为树或森林,需要在二叉树中去掉所有双亲和右孩子的连线。(×)
二叉树转换为森林,森林中树的个数取决于二叉树中最右分支上的结点个数。(√)

最优二叉树
最优二叉树中不存在度为1的结点。(√)
在最优二叉树中,权值越大的叶子结点越靠近根结点。(√)
在最优二叉树中,根结点的值等于所有叶子结点的权值之和。(√)
通常来说,不等长编码的编码效率高于等长编码的编码效率。(×)
在一组编码中,如果某个编码是其他编码的前缀,则解码可能不唯一。(√)
给定权值{3,4,5,6,7},采用哈夫曼算法构造最优二叉树,带权路径长度是(B)。
A.25 B.57 C.62 D.61
参考资料:《数据结构(从概念到C++实现)》清华大学出版社,王红梅

猜你喜欢

转载自blog.csdn.net/oldmao_2001/article/details/109034518