文章
154
粉丝
0
获赞
3
访问
24.9k
评分及理由
(1)得分及理由(满分3分)
学生答案的基本设计思想是使用DFS(深度优先搜索,即先序遍历)遍历二叉树,同时传递当前深度(高度)参数,计算每个叶子结点的权值与深度的乘积之和。这与标准答案中基于先序遍历的思想一致,思路正确。因此得3分。
(2)得分及理由(满分4分)
学生给出的结点数据类型定义存在错误:
typedef struct TreeNode { ... } TreeNode;
)。weight
应直接定义为int weight;
,而非通过函数参数初始化(int weight = val;
不符合C/C++语法)。left
和right
应为指针类型(struct TreeNode* left;
),但学生答案中未正确声明(缺少*
)。由于数据类型定义存在多处语法和逻辑错误,扣4分。但考虑到可能是识别错误(如误写或漏写),但错误较多且影响基本结构,因此得0分。
(3)得分及理由(满分6分)
学生给出的算法代码整体思路正确:通过递归先序遍历计算WPL,递归函数中累计当前结点的权值与深度的乘积(仅对非空结点),并递归处理左右子树。但存在以下问题:
weight
域,但问题描述中明确“叶结点的weight域保存该结点的非负权值”,暗示非叶结点的weight可能无意义或为0?学生算法假设所有结点都有权值,但题目仅要求叶结点有权值,因此可能逻辑错误。root == NULL
)正确,但递归公式对所有结点计算root->weight * height
,这与WPL定义不符(应仅叶结点)。扣分理由:逻辑错误(错误地计算了非叶结点的贡献),但考虑到题目中非叶结点的weight可能为0(未明确说明),但严格按定义应只处理叶结点。因此扣3分(主要逻辑错误)。此外,代码中高度起始值为1(根深度为1)正确,递归...
登录后发布评论
暂无评论,来抢沙发