评分及理由
(1)得分及理由(满分3分)
得分:2分
理由:学生答案中描述“采用递归后序递归遍历,找到左子树中的最大值以及右子树中的最小值,与根结点作差判断绝对值是否相等”,这符合标准答案中的次优解思路(利用二叉搜索树性质,通过左子树最大值和右子树最小值计算最小距离)。但未明确说明需要先判断结点是否同时存在左右子树(这是条件①),且后序遍历的描述与代码实现不完全匹配(代码中实际是先序遍历),因此扣1分。
(2)得分及理由(满分9分)
得分:5分
理由:
- 代码实现了次优解的核心思想:通过MaxL函数获取左子树最大值(最右结点),MinR函数获取右子树最小值(最左结点),并计算差值比较。
- 但存在多处逻辑错误:
- MaxL函数中,当左子树为空时不应返回root->val(应返回无效值,但题目中结点值为正,可能混淆),且条件判断冗余(root->left == NULL 已检查,但后续又检查root->left->right)。
- MinR函数中,指针p错误地从root->left开始(应为root->right),导致逻辑错误(扣2分)。
- countNodes函数中,递归调用未正确累积结果(sum是全局变量但未更新,且返回语句错误:应累积计数而非直接返回sum+1),同时缺少对左右子树存在性的判断(条件①未完整处理:代码中只检查了叶结点情况,但未显式检查左右子树是否存在)。
- 递归终止条件冗余(两次检查root==NULL)且叶结点返回1错误(叶结点不满足条件,应返回0)。
- 由于核心思路正确但实现存在较多错误,扣4分。
(3)得分及理由(满分2分)
得分:0分
理由:学生答案中写的是“O(log₂n)”,但实际算法时间复杂度应为O(nh)(h为树高),因为对每个结点(O(n))需要遍历左子树最右路径和右子树最左路径(O(h))。学生给出的复杂度错误,且未说明理由,因此不得分。
题目总分:2+5+0=7分
登录后发布评论
暂无评论,来抢沙发