文章
317
粉丝
1
获赞
220
访问
82.8k

评分及理由
(1)得分及理由(满分3分)
得分:2分
理由:学生作答中给出的基本设计思想是“对二叉树进行中序遍历,当遇到叶结点时计算当前树高乘该结点权值,并用wpl全局变量计算累和”。该思路正确,通过递归遍历(中序)并传递深度参数来计算每个叶子结点的带权路径长度并累加,符合WPL的定义。但是,学生提到“最后wpl中即为最小wpl”,其中“最小wpl”表述有误,WPL是给定二叉树的固定值,不存在最小之说,属于概念理解不准确。因此扣1分。
(2)得分及理由(满分4分)
得分:4分
理由:学生给出的二叉树结点数据类型定义为:
struct LNode{
struct LNode* left;
int weight;
struct LNode* right;
}
该定义与题目要求的二叉链表存储结构一致,包含了左指针、权值、右指针,且使用结构体定义,完全正确。因此得满分。
(3)得分及理由(满分6分)
得分:4分
理由:学生代码整体框架正确,采用中序遍历递归计算WPL,并使用了全局变量wpl和深度参数height。主要扣分点如下:
1. 函数Cwpl的返回类型为int,但函数体内没有返回有效值(仅在递归基返回0),而WPL结果存储在全局变量中,这虽然不影响计算,但函数设计有瑕疵,属于逻辑不严谨,扣1分。
2. 代码中出现了int main(LNode* root),这不符合C/C++中main函数的规范用法(main函数通常不带参数或带标准参数),且题目要求设计算法函数,并非完整程序,此处属于设计错误,扣1分。
其他部分:递归终止条件正确,叶子结点判断正确,深度传递正确,累加计算正确。因此扣除2分后得4分。
题目总分:2+4+4=10分
登录后发布评论
暂无评论,来抢沙发