跳转至

第四章树与二叉树

答案速对

1 2 3 4 5 6 7 8 9 10
B C C C D A A D D C
11 12 13 14 15 16 17 18 19 20
A B B B A A C D A D
21 22 23 24 25 26 27 28 29 30
B C B C C A B D D D
31 32 33 34 35 36
A C B D B D

(一) 树的基本概念

  1. 【2010-05】在一棵度数为4的树 T 中,若有20个度为4的结点,10个度为3的结点,1个度为2的结点,10个度为 1 的结点,则树 T 的叶结点个数是( )。

A. 41

B. 82

C. 113

D. 122

解析

设度为 i 的结点数为 公式,叶结点数为 公式。

树中所有结点的度数之和等于边数。题目中非叶结点贡献的边数为公式

因此树有 122 条边。树的结点总数等于边数加 1,所以公式

已知非叶结点总数为公式

故叶结点数为公式

也可以直接使用公式公式进行计算。

答案:B

  1. 【2022-04】若三叉树T有244个结点(叶结点的高度为1),则T的高度至少是( )。

A. 4

B. 5

C. 6

D. 7

解析

要让包含固定结点数的三叉树高度尽量小,每一层都应尽可能放满。

高度为 h 的满三叉树最多包含公式

个结点。

分别计算:公式公式

高度为 5 时最多只有 121 个结点,容纳不了 244 个;高度为 6 时最多可容纳 364 个,因此可以容纳 244 个。

所以最小高度为 6。

答案:C

(二) 二叉树

二叉树的定义及其主要特征

  1. 【2009-05】已知一棵完全二叉树的第6层(设根为第1层)有 8 个叶结点,则完全二叉树的结点个数最多是( )。

A. 39

B. 52

C. 111

D. 119

解析

要使结点总数最大,树应尽可能向第 7 层扩展。

如果树有第 7 层,则第 1 至第 6 层必须全部排满。第 6 层共有公式个结点。

其中有 8 个是叶结点,所以其余公式个结点可以拥有孩子。

为了让总数最大,这 24 个非叶结点都应有两个孩子,因此第 7 层最多有公式个结点。完全二叉树要求最后一层从左向右连续排列,48 个结点满足这一要求。

第 1 至第 6 层共有公式个结点,所以最多共有公式个结点。

答案:C

  1. 【2011-04】若一棵完全二叉树有768个结点,则该二叉树中叶结点的个数是( )。

A. 257

B. 258

C. 384

D. 385

解析

完全二叉树按从 1 开始的顺序编号时,编号为 i 的结点若存在左孩子,则左孩子编号为 公式。

因此,编号满足公式的结点是非叶结点,即公式

非叶结点共有公式个。

叶结点数为公式

等价地说,完全二叉树的叶结点数为 公式。

答案:C

  1. 【2011-06】已知一棵有2011个结点的树,其叶结点个数为116,该树对应的二叉树中无右孩子的结点个数是( )。

A. 115

B. 116

C. 1895

D. 1896

解析

树转换为二叉树时采用“左孩子—右兄弟”表示法:

  • 二叉树中的左孩子指针指向原树中的第一个孩子;
  • 二叉树中的右孩子指针指向原树中的下一个兄弟。

在原树中,每个非叶结点的所有孩子里,最后一个孩子没有下一个兄弟,因此它在对应二叉树中没有右孩子。

原树的非叶结点数为公式

每个非叶结点贡献一个“最后的孩子”,所以有 1895 个这样的无右孩子结点。

此外,原树的根结点没有兄弟,在对应二叉树中也没有右孩子。因此还要加上根结点:公式

答案:D

  1. 【2018-04】设一棵非空完全二叉树T的所有叶结点均位于同一层,且每个非叶结点都有2个子结点。若T有 k 个叶结点,则T的结点总数是( )。

A. 2k−1

B. 2k

C. \(k^2\)

D. \(2^k−1\)

解析

题目描述的是一棵满二叉树,也是一棵严格二叉树。设叶结点数为 公式,度为 2 的结点数为 公式。

二叉树中有基本关系公式

因此公式

树中没有度为 1 的结点,所以结点总数为公式

答案:A

二叉树的顺序存储结构和链式存储结构

  1. 【2020-03】对于任意一棵高度为5且有10个结点的二叉树,若采用顺序存储结构保存,每个结点占1个存储单元(仅存放结点的数据信息),则存放该二叉树需要的存储单元数量至少是( )。

A. 31

B. 16

C. 15

D. 10

解析

顺序存储二叉树时,若根结点编号为 1,则编号为 i 的结点:

  • 左孩子编号为 公式;
  • 右孩子编号为 公式。

高度为 5 的二叉树中,最右侧路径上的结点编号依次为公式

虽然树只有 10 个实际结点,但“任意一棵”意味着必须考虑结点分布很稀疏、最深结点恰好位于编号 31 的位置。完全可以先用 5 个结点形成最右路径,再在其祖先的其他位置补入另外 5 个结点,所以这种情况确实存在。

数组必须能够访问下标或编号 31 对应的位置,因此至少需要 31 个存储单元。

顺序存储的空间需求取决于最大结点编号,而不只是实际结点数。

答案:A

  1. 【2025-03】若二叉树的节点值均为正整数,采用顺序存储方式保存在数组 R 中,用 -1 表示节点不存在,则下列数组中,不能表示一棵二叉树的是()。

A.R[] = {20, 15, 40, -1, -1, 35}

B.R[] = {15, 40, 10, 18, 35, -1, -1}

C.R[] = {15, 40, 10, -1, -1, -1, 12}

D.R[] = {17, 20, 35, -1, 18, 45, -1, -1, 19, 27}

解析

题图

数组下标从 0 开始时,下标 i 处结点的父结点下标为公式

一个非空结点若要合法存在,其父结点位置必须也非空。

A 中下标 5 的结点 35,其父结点下标为 2,对应结点 40,合法。

B 中所有非空结点的父结点均存在,合法。

C 中下标 6 的结点 12,其父结点下标为 2,对应结点 10,合法。

D 中下标 8 存放结点 19,但其父结点下标为公式

而下标 3 的值是 公式,表示父结点不存在。没有父结点的 19 成了“悬空结点”,不能构成合法二叉树。

答案:D

二叉树的遍历

  1. 【2009-03】给定二叉树如右图所示。设 N 代表二叉树的根, L 代表根结点的左子树, R 代表根结点的右子树。若遍历后的结点序列为3, 1, 7, 5, 6, 2, 4,则其遍历方式是( )。

1783064677402-4130fe71-a006-4f36-9746-b4ce16c73397.png

A. LRN

B. NRL

C. RLN

D. RNL

解析

题目序列从 3 开始,而 3 是根结点 1 的右子树,所以第一步是 R。

访问完右子树 3 后,序列立即出现根结点 1,所以第二步是 N。

最后处理左子树。对以 2 为根的左子树也采用 RNL:

  1. 先遍历 2 的右子树 5;
  2. 在以 5 为根的子树中,先访问右孩子 7,再访问根 5,再访问左孩子 6;
  3. 然后访问根 2;
  4. 最后访问左孩子 4。

于是完整序列为公式

与题目完全一致。

答案:D

  1. 【2011-05】若一棵二叉树的前序遍历序列和后序遍历序列分别为1, 2, 3, 4和4, 3, 2, 1,则该二叉树的中序遍历序列不会是( )。

A. 1, 2, 3, 4

B. 2, 3, 4, 1

C. 3, 2, 4, 1

D. 4, 3, 2, 1

解析

前序为 1、2、3、4,后序为 4、3、2、1,说明结点关系只能是一条单支链:公式

每个父结点都只有一个孩子,但这个孩子可以是左孩子,也可以是右孩子。

  • 若每个孩子都是右孩子,中序为 1、2、3、4,所以 A 可能。
  • 若 1 的孩子 2 是左孩子,而 2、3、4 构成右链,中序为 2、3、4、1,所以 B 可能。
  • 若每个孩子都是左孩子,中序为 4、3、2、1,所以 D 可能。

检查 C:要使 1 最后访问,2 必须位于 1 的左子树。对于以 2 为根的单支链:

  • 若 2 的唯一孩子在右边,中序必须先出现 2;
  • 若唯一孩子在左边,中序必须先完整访问孩子子树,再出现 2,2 后面不可能再出现同一子树中的 4。

因此 3、2、4、1 无法产生。

题图

答案:C

  1. 【2012-03】若一棵二叉树的前序遍历序列为a, e, b, d, c,后序遍历序列为b, c, d, e, a,则根结点的孩子结点( )。

A. 只有e

B. 有e、b

C. 有e、c

D. 无法确定

解析

题图

前序遍历的第一个结点和后序遍历的最后一个结点都是根,因此根为 a。

前序中 a 后面的第一个结点 e 一定是 a 的某个孩子,并且是 a 唯一子树或左子树的根。

后序序列中,e 位于 a 之前的最后一个位置:公式

这说明除 a 外的所有结点 b、c、d、e 都属于以 e 为根的同一棵子树。

如果 a 还有第二个孩子,那么第二棵子树的根应在后序遍历中位于 e 与 a 之间,但这里没有任何结点。因此 a 只有一个孩子 e。

至于 e 是左孩子还是右孩子,仅凭前序和后序不能确定,但题目只问孩子结点是谁。

答案:A

  1. 【2015-02】先序序列为a, b, c, d的不同二叉树的个数是( )。

A. 13

B. 14

C. 15

D. 16

解析

给定 4 个互不相同的结点和固定先序序列后,每一种不同的二叉树形状都唯一对应一种结点安排:按照先序顺序依次把 a、b、c、d 填入该形状即可。

含 n 个结点的不同二叉树形状数为第 n 个卡特兰数:公式

当 公式 时:公式

答案:B

  1. 【2017-05】已知一棵二叉树的树形如下图所示,其后序序列为e, a, c, b, d, g, f,树中与结点a同层的结点是( )。

1783064766463-8d112b75-e893-44eb-8f9f-5f16c4c42651.png

A. c

B. d

C. f

D. g

解析

根据题图形状和后序遍历“左子树—右子树—根”依次回填结点,可得到:

题图

验证后序:

  • 左子树后序为 e、a、c;
  • 右子树后序为 b、d、g;
  • 最后访问根 f。

合并后正是 e、a、c、b、d、g、f。

从层次看:

  • 第 1 层:f;
  • 第 2 层:c、g;
  • 第 3 层:a、d;
  • 第 4 层:e、b。

所以与 a 同层的是 d。

答案:B

  1. 【2017-04】要使一棵非空二叉树的先序序列与中序序列相同,其所有非叶结点须满足的条件是( )。

A. 只有左子树

B. 只有右子树

C. 结点的度均为1

D. 结点的度均为2

解析

先序遍历次序是公式

中序遍历次序是公式

两者唯一的差异是根与左子树的先后顺序。

如果任一非叶结点存在左子树:

  • 先序会先访问该结点,再访问左子树;
  • 中序会先访问左子树,再访问该结点。

两种序列必然不同。

因此所有非叶结点都不能有左子树,只能有右子树。这样先序和中序都会先访问当前根,再沿右子树继续。

“度均为 1”还可能包含只有左孩子的结点,条件不够充分。

答案:B

  1. 【2023-05】已知一棵二叉树的树形如下图所示,若其后序遍历为 f, d, b, e, c, a,则其先(前)序遍历序列是( )。

1783064830525-419f306d-778b-4164-abca-a216dfecf91d.png

A. a, e, d, f, b, c

B. a, c, e, b, d, f

C. c, a, b, e, f, d

D. d, f, e, b, a, c

解析

题图

答案:A

  1. 【2024-03】若 p、q 和 v 均为二叉树 T 中的结点,v 有两个孩子结点,T 的中序遍历序列形如“ …,p,v,q,… ”,则下列叙述中,正确的是

A. p没有右孩子,q没有左孩子

B. p没有右孩子,q有左孩子

C. p有右孩子,q没有左孩子

D. p有右孩子,q有左孩子

解析

因为 v 有左子树,中序遍历中 v 的直接前驱 p 是 v 左子树中最靠右的结点。

如果 p 还有右孩子,那么中序遍历在访问 p 后还必须访问其右子树,p 就不可能紧邻 v。因此 p 没有右孩子。

同理,v 的直接后继 q 是 v 右子树中最靠左的结点。

如果 q 还有左孩子,中序遍历必须先访问该左子树,再访问 q,q 就不可能紧邻 v。因此 q 没有左孩子。

答案:A

  1. 【2026-03】已知二叉树 T 的中序遍历为 b, e, d, f, c, a, g。层序遍历为 a, b, g, c, d, e, f。则其后序遍历序列为多少?

A.c, e, d, f, b, g, a

B.c, e, f, d, b, g, a

C.e, f, d, c, b, g, a

D.e, g, f, d, b, c, a

解析

题图

层序遍历的第一个结点 a 是根。a 在中序序列中把树分成:

  • 左子树:b、e、d、f、c;
  • 右子树:g。

在层序序列中筛选左子树结点,最先出现的是 b,所以 b 是左子树根。b 在对应中序片段的最左端,因此 b 没有左子树,右子树包含 e、d、f、c。

继续筛选,c 最先出现,所以 c 是 b 的右孩子。c 在中序片段末尾,因此 c 只有左子树 e、d、f。

该左子树根为 d,中序中 d 左边是 e、右边是 f,所以 d 的左右孩子分别是 e、f。

后序遍历为:

  • a 的左子树:e、f、d、c、b;
  • a 的右子树:g;
  • 根:a。

所以结果是公式

答案:C

线索二叉树的基本概念和构造

  1. 【2010-03】下列线索二叉树中(用虚线表示线索),符合后序线索树定义的是( )

1783065131987-76f4277a-6c36-4943-b715-3af22921b1ba.png

解析

这棵树的后序遍历是公式

后序线索化时,空左指针指向后序前驱,空右指针指向后序后继:

  • b 的左指针为空,b 的前驱是 d,所以左线索指向 d;
  • c 是叶结点,前驱是 b、后继是 a,所以 c 的左右线索分别指向 b、a;
  • d 是第一个后序结点,左线索指向 NULL;d 的后继是 b,所以右线索指向 b;
  • a 的左右指针均为真实孩子指针,不建立线索。

这与题图中的 D 一致。

答案:D

  1. 【2013-05】若 X 是后序线索二叉树中的叶结点,且 X 存在左兄弟结点 Y 。则 X 的右线索指的是( )。

A. X 的父结点

B. 以 Y 为根的子树的最左下结点

C. X 的左兄弟结点 Y

D. 以 Y 为根的子树的最右下结点

解析

X 存在左兄弟 Y,说明 X 是父结点的右孩子。

后序遍历顺序是公式

遍历完左兄弟 Y 所在的左子树后,会遍历右子树 X。X 是叶结点,访问 X 后,父结点的两个子树都已处理完,因此下一个访问的结点就是 X 的父结点。

叶结点 X 的右指针为空,在后序线索化中应改为指向其后序后继,即父结点。

答案:A

  1. 【2014-04】若对如下的二叉树进行中序线索化,则结点 x 的左、右线索指向的结点分别是( )。

1783065166713-d80ec407-0624-4873-b58b-dfceff2f3fb3.png

A. e、c

B. e、a

C. d、c

D. b、a

解析

题图

中序遍历按“左子树—根—右子树”进行:

  • d 的中序序列为 d、e;
  • b 的左子树之后访问 b,再访问右孩子 x;
  • 最后访问 a、c。

所以完整中序序列为公式

x 是叶结点,左右指针都为空:

  • x 的中序前驱是紧邻它之前的 b,所以左线索指向 b;
  • x 的中序后继是紧邻它之后的 a,所以右线索指向 a。

答案:D

(三) 树、森林

树的存储结构

森林与二叉树的转换

  1. 【2009-06】将森林转换为对应的二叉树,若在二叉树中,结点 u 是结点 v 的父结点的父结点,则在原来的森林中, u 和 v 可能具有的关系是( )。

I. 父子关系

II. 兄弟关系

III. u 的父结点与 v 的父结点是兄弟关系

A. 只有II

B. I和II

C. I和III

D. I、II和III

解析

森林转换为二叉树采用“左孩子、右兄弟”规则:

  • 二叉树中的左边 L:对应森林中的第一个孩子。
  • 二叉树中的右边 R:对应森林中的下一个兄弟。

设二叉树中 v 的父结点为 x,题意即路径为 u → x → v。两条边各有左、右两种可能,共有四种情况:

题图

方法一:枚举四种情况

  1. L-L:x 是 u 的孩子,v 是 x 的孩子。
    因此 u 与 v 是祖孙关系,不符合 I~III。
  2. L-R:x 是 u 的第一个孩子,v 是 x 的下一个兄弟。
    所以 x、v 都是 u 的孩子,即 u 与 v 是父子关系。
    I 正确。
  3. R-L:x 是 u 的下一个兄弟,v 是 x 的孩子。
    因此 u 是 v 的父结点 x 的兄弟,二者属于叔侄关系,不符合 I~III。
  4. R-R:x 是 u 的下一个兄弟,v 又是 x 的下一个兄弟。
    所以 u、x、v 是同一组兄弟结点。
    II 正确。

方法二:快速判断

二叉树中从 u 到 v 恰好只有两条边,因此只能出现 L-L、L-R、R-L、R-R 四种情况。它们在森林中分别对应祖孙、父子、叔侄和兄弟关系。

其中没有任何一种情况能使“u 的父结点与 v 的父结点是兄弟关系”,故 III 错误。

因此,本题选择 B.I 和 II。

答案:B

  1. 【2014-05】将森林F转换为对应的二叉树T,F中叶子的个数等于( )。

A. T中叶结点的个数

B. T中度为1的结点个数

C. T中左孩子指针为空的结点个数

D. T中右孩子指针为空的结点个数

解析

在“左孩子—右兄弟”表示法中,二叉树结点的左孩子指针指向原森林中该结点的第一个孩子。

因此:

  • 原森林中的结点若有孩子,其左孩子指针一定非空;
  • 原森林中的结点若是叶子,没有任何孩子,其左孩子指针一定为空。

两者一一对应,所以森林叶子数等于对应二叉树中左孩子指针为空的结点数。

右孩子指针反映的是“有没有下一个兄弟”,与是否为叶子无直接对应关系。

答案:C

  1. 【2019-02】若将一棵树T转化为对应的二叉树BT,则下列对BT的遍历中,其遍历序列与T的后根遍历序列相同的是( )。

A. 先序遍历

B. 中序遍历

C. 后序遍历

D. 按层遍历

解析

树的后根遍历规则是:

  1. 从左到右依次遍历根的各棵子树;
  2. 最后访问根。

转换后的二叉树用左指针连接第一个孩子,用右指针连接后续兄弟。

对二叉树进行中序遍历时:

  1. 先沿左指针进入第一个孩子;
  2. 孩子的右兄弟链会在对应子树的遍历过程中依次得到处理;
  3. 所有孩子及其子树处理完成后,才访问当前根。

这与原树“先遍历各子树、后访问根”的后根遍历一致。

一个简单例子:原树根 a 有孩子 b、c。原树后根遍历为 b、c、a。转换后二叉树中 a 的左孩子是 b,b 的右孩子是 c,其中序遍历同样为 b、c、a。

答案:B

  1. 【2020-04】已知森林F和对应的二叉树T,若F的先根遍历序列序是a, b, c, d, e, f,后根遍历序列是b, a, d, f, e, c,则T的后序遍历序列是( )。

A. b, a, d, f, e, c

B. b, d, f, e, c, a

C. b, f, e, d, c, a

D. f, e, d, c, b, a

解析

题图

  1. 【2021-04】某森林F对应的二叉树为T,若T的先序遍历序列是a, b, d, c, e, g, f,中序遍历序列是b, d, a, e, g, c, f,则F中树的棵数是( )。

A. 1

B. 2

C. 3

D. 4

解析

题图

树和森林的遍历

(四) 树与二叉树的应用

哈夫曼(Huffman)树和哈夫曼编码

  1. 【2010-06】对 n(n≥2) 个权值均不相同的字符构成哈夫曼树。下列关于该哈夫曼树的叙述中,错误的是( )。

A. 该树一定是一棵完全二叉树

B. 树中一定没有度为 1 的结点

C. 树中两个权值最小的结点一定是兄弟结点

D. 树中任一非叶结点的权值一定不小于下一层任一结点的权值

解析

哈夫曼树的构造过程是每次选取当前权值最小的两个结点合并。

B 正确。每次合并都会产生一个拥有两个孩子的新结点,所以哈夫曼树只有度为 0 和度为 2 的结点,没有度为 1 的结点。

C 正确。最初两个最小权值一定在第一次合并时成为同一新结点的两个孩子,之后它们的兄弟关系不会改变。

D 正确。内部结点的权值是其两个孩子权值之和,并且哈夫曼合并过程使越靠近根的合并权值越大,不会小于下一层结点的权值。

A 错误。哈夫曼树一定是严格二叉树,但不一定是完全二叉树。权值分布很不均匀时,较小权值会被多次合并,树形可能明显向一侧加深,不满足完全二叉树的层序连续性。

答案:A

  1. 【2013-04】已知三叉树 T 中 6 个叶结点的权分别是 2,3,4,5,6,7 , T 的带权(外部)路径长度最小是( )。

A. 27

B. 46

C. 54

D. 56

解析

题图

对于严格三叉哈夫曼树,叶结点数 n 应满足公式

这里 公式,不满足条件,所以补入一个权值为 0 的虚叶结点,使叶结点数变为 7。虚结点只用于构造,不增加 WPL。

每次合并三个最小权值:

  1. 合并 公式,得到新权值 5;
  2. 此时权值为 公式,合并 公式,得到 14;
  3. 合并 公式,得到根权值 27。

哈夫曼树的 WPL 等于所有合并权值之和:公式

答案:B

  1. 【2014-06】5个字符有如下4种编码方案,不是前缀编码的是( )。

A. 01, 0000, 0001, 001, 1

B. 011, 000, 001, 010, 1

C. 000, 001, 010, 011, 100

D. 0, 100, 110, 1110, 1100

解析

前缀编码要求:任何一个字符的编码都不能是另一个字符编码的前缀。

A 中:

  • 01 不会成为任何其他编码的开头;
  • 001 与 0000、0001 在第三位已经不同;
  • 1 也不是其他编码的前缀。

所以 A 是前缀编码。

B 中 4 个以 0 开头的编码长度都为 3,编码 1 与它们首位不同,因此也是前缀编码。

C 中所有编码等长,任一编码都不可能是另一个不同编码的前缀。

D 中存在公式

编码 110 是编码 1100 的前缀,因此无法进行唯一、即时译码。

答案:D

  1. 【2015-03】下列选项给出的是从根分别到达两个叶结点路径上的权值序列,能属于同一棵哈夫曼树的是( )。

A. 24, 10, 5 和 24, 10, 7

B. 24, 10, 5 和 24, 12, 7

C. 24, 10, 10 和 24, 14, 11

D. 24, 10, 5 和 24, 14, 6

解析

题图

哈夫曼树中,每个非叶结点的权值等于两个孩子权值之和。

A 中两个叶结点 5、7 若同属于权值 10 的父结点,应满足 公式,但实际为 12,不可能。

B 中根的两个孩子权值为 10、12,但 公式,不可能。

C 中权值为 10 的非叶结点不可能有一个权值也为 10 的孩子,因为另一个孩子权值为正时,两个孩子之和必然大于 10。

D 中合并过程为 公式、公式、公式,完全符合哈夫曼构造规则。两条路径可以分别是 24、10、5 和 24、14、6。

答案:D

  1. 【2017-06】已知字符集{a, b, c, d, e, f, g, h},若各字符的哈夫曼编码依次是0100, 10, 0000, 0101, 001, 011, 11, 0001,则编码序列0100011001001011110101的译码结果是( )。

A. a c g a b f h

B. a d b a g b b

C. a f b e a g d

D. a f e e f g d

解析

哈夫曼编码是前缀编码,所以从左向右扫描,每遇到一个完整编码就可立即确定字符。

对编码串分段:公式

逐段查找:

公式

公式

公式

公式

公式

公式

公式

所以译码结果为 a、f、e、e、f、g、d。

答案:D

  1. 【2018-05】已知字符集{a, b, c, d, e, f},若各字符出现的次数分别为6, 3, 8, 2, 10, 4,则对应字符集中各字符的哈夫曼编码可能是( )。

A. 00, 1011, 01, 1010, 11, 100

B. 00, 100, 110, 000, 0010, 01

C. 10, 1011, 11, 0011, 00, 010

D. 0011, 10, 11, 0010, 01, 000

解析

按哈夫曼算法合并权值:

  1. 公式;
  2. 公式;
  3. 公式;
  4. 公式;
  5. 公式。

由此得到各字符的编码长度:

  • a,频次 6:长度 2;
  • b,频次 3:长度 4;
  • c,频次 8:长度 2;
  • d,频次 2:长度 4;
  • e,频次 10:长度 2;
  • f,频次 4:长度 3。

权值越小的字符通常越深,权值较大的字符更靠近根。

A 中各字符编码长度依次为公式

与哈夫曼树的深度完全一致,并且该组编码满足前缀编码条件。

其他选项的编码长度分配与上述深度不符,部分还不满足前缀条件。

答案:A

  1. 【2019-03】对 n 个互不相同的符号进行哈夫曼编码。若生成的哈夫曼树共有115个结点,则 n 的值是( )。

A. 56

B. 57

C. 58

D. 60

解析

二叉哈夫曼树没有度为 1 的结点,是严格二叉树。

设叶结点数为 n,度为 2 的内部结点数为 公式。严格二叉树满足公式所以公式

总结点数为公式

根据题意:公式公式公式

答案:C

  1. 【2021-05】若某二叉树有5个叶结点,其权值分别为10, 12, 16, 21, 30,则其最小的带权路径长度(WPL)是( )。

A. 89

B. 200

C. 208

D. 289

解析

题图

答案:B

  1. 【2022-05】对于任意给定的含 n(n>2) 个字符集的有限集 S ,用二叉树表示 S 的哈夫曼编码集和定长编码集,分别得到二叉树T1和T2。下列叙述中,正确的是( )。

A. T1和T2的结点数相同

B. T1的高度大于T2的高度

C. 出现频次不同的字符在T1中处于不同的层

D. 出现频次不同的字符在T2中处于相同的层

解析

定长编码的所有字符编码长度相同,所以表示这些字符的叶结点全部位于相同层。字符出现频次不会改变其编码长度,因此 D 正确。

A 错误。哈夫曼树和定长编码树的形状通常不同,内部结点和空缺分支情况也不同,结点数不保证相同。

B 错误。哈夫曼树可能比定长编码树高,但在频次相同或树形较平衡时也可能高度相同,不能对任意字符集都断言严格大于。

C 错误。频次不同的字符也可能得到相同长度的哈夫曼编码,即位于同一层。例如两个权值不同的叶结点可能恰好处于同一深度。

答案:D

  1. 【2023-04】在由 6 个字符组成的字符集 S 中,各字符出现的频次分别为 3, 4, 5, 6, 8, 10,为 S 构造的哈夫曼编码的加权平均长度为( )。

A. 2.4

B. 2.5

C. 2.67

D. 2.75

解析

题图

按哈夫曼算法合并:

  1. 公式;
  2. 公式;
  3. 公式;
  4. 公式;
  5. 公式。

WPL 为所有合并权值之和:公式

所有字符频次之和为公式

加权平均编码长度为公式

答案:B

  1. 【2026-05】假设二叉树中节点权值为 a=1 , b=2 , c=4 , d=5 , e=8 , f=10 , g=12 。当带权路径长度(WPL)最小时,与节点 e (权值 8)处于相同深度的节点是哪些?

A.d B.g C.d,f D.f,g

解析

按哈夫曼算法依次合并:

  1. 公式;
  2. 公式;
  3. 公式;
  4. 公式;
  5. 原权值 12 与新权值 12 合并为 24;
  6. 公式。

对应的一棵哈夫曼树为:

题图

从根开始计算深度:

  • e、f、g 都位于第 2 层深度;
  • d 位于更深一层;
  • c、a、b 更深。

因此与 e 同深度的是 f 和 g。

答案:D

并查集及其应用

堆及其应用