🏷️ 知识点:带权路径长度

共 3 道相关题目

2013 年第 4 题 数据结构 选择题

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

树的概念 带权路径长度

A.27

B.46

C.54

D.56

[tag_link] 正确答案:B将 哈夫曼树 的思想推广到三叉树的情形。为了构成严格的三叉树,需添加权为 0 的虚叶结点,对于严格的三叉树(n0−1)%(3−1)=u=1\=0,需要添加m−u−1=3−1−1个叶结点,说明 7 个叶结点刚好可以构成一个严格的三叉树。按照哈夫曼树的原则,权为 0 的叶结点应离树根最远构造最小带权生成树的过程如下:最小的带权路径长度为(2+3)×3+(4+5)×2+(6+7)×1=46。

2012_Q41_1


2021 年第 5 题 数据结构 选择题

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

哈夫曼树

A. 89 B. 200 C. 208 D. 289

[tag_link]

正确答案:B

根据 Huffman 构建过程 来构建得到如下二叉树:

         89
      /      \
     52      37
   /   \    /  \
  22   30  16  21
 /  \
10  12

带权路径长度 为:(10+12)×3+(30+16+21)×2=200


2014 年第 41 题 数据结构 综合题

(10分)二叉树的带权路径长度( WPL) 是二叉树中所有叶结点的带权路径长度之和。给定一棵二叉 树T, 采用二叉链表存储,结点结构为:

leftweightright

其中叶结点的weight 域保存该结点的非负权值。设root为指向T 的根结点的指针,请设计求T的 WPL 的算法,要求:

(1)给出算法的基本设计思想;

(2)使用C 或 C++语言,给出二叉树结点的数据类型定义;

(3)根据设计思想,采用C 或 C++语言描述算法,关键之处给出注释。

[tag_link]

算法的基本设计思想: ①基于先序递归遍历的算法思想是用一个 static 变量记录 wpl,把每个结点的深度作为递归函数的一个参数传递,算法步骤如下: 若该结点是叶子结点,则变量 wpl 加上该结点的深度与权值之积; 若该结点非叶子结点,则若左子树不为空,对左子树调用递归算法,若右子树不为空,对右子树调用递归算法,深度参数均为本结点的深度参数加 1; 最后返回计算出的 wpl 即可。 ② 若考生给出能够满足题目要求的其他算法且正确,可同样给分。 ②考生答案无论使用 C 或者 C++ 语言,只要答案正确同样给分。 ③ 的标准给分。 ④若考生给出的二叉树结点的数据类型定义和算法实现中,使用的是除整型之外的其他数值,可视同使用整型类型。 ⑤若考生给出的答案中算法主要设计思想或算法中部分正确,可酌情给分。