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++ 语言,只要答案正确同样给分。 ③ 的标准给分。 ④若考生给出的二叉树结点的数据类型定义和算法实现中,使用的是除整型之外的其他数值,可视同使用整型类型。 ⑤若考生给出的答案中算法主要设计思想或算法中部分正确,可酌情给分。