文章
54
粉丝
12
获赞
0
访问
5.5k
(1) 算法基本设计思想
采用递归遍历二叉树,同时记录当前节点的 “深度”。若遇到叶节点(左右子树均为空),则将 “节点权值 × 深度” 累加到总 WPL 中;若不是叶节点,则继续递归遍历其左右子树,且深度加 1(因为子节点深度比父节点大 1)。
(2) 二叉树结点的数据类型定义(C 语言)
c
typedef struct BiTNode {
int weight; // 节点权值(叶节点为非负有效权值)
struct BiTNode *left; // 指向左子树的指针
struct BiTNode *right;// 指向右子树的指针
} BiTNode, *BiTree;
(3) 算法描述(C 语言,递归实现)
c
int WPL = 0; // 全局变量,存储带权路径长度的总和
void CalculateWPL(BiTree root, int depth) {
if (root == NULL) { // 空节点,直接返回
return;
}
// 若为叶节点(左右子树均为空),累加“权值×深度”到WPL
if (root->left == NULL && root->right == NULL) {
WPL += root->weight * depth;
}
// 递归遍历左子树,深度+1
CalculateWPL(root->left, depth + 1);
// 递归遍历右子树,深度+1
CalculateWPL(root->right, depth + 1);
}
评分及理由
(1)得分及理由(满分3分)
学生给出的算法基本设计思想正确,描述了通过递归遍历二叉树,记录节点深度,并在遇到叶节点时累加权值与深度的乘积到WPL。思路与标准答案中的先序遍历递归方法一致。因此得3分。
(2)得分及理由(满分4分)
学生给出的二叉树结点的数据类型定义正确,包含了weight、left和right字段,...
登录后发布评论
暂无评论,来抢沙发