文章

7

粉丝

0

获赞

0

访问

585

头像
2025 年 9 月第 1 次 408 月考试卷 - 第41题回答
数据结构
发布于2025年9月20日 17:25
阅读数 95


评分及理由

(1)得分及理由(满分3分)

学生答案中描述的思路是:从根节点开始遍历,当结点同时拥有左右子树时,找到该结点的直接前驱(左子树最大值)和直接后继(右子树最小值),然后计算当前结点值与这两个值的差,并判断是否相等。这与标准答案中的“次优解”思路一致,利用了二叉搜索树的性质,避免了遍历整个子树。因此,思路描述正确,得3分。

(2)得分及理由(满分9分)

学生提供的代码实现了上述思路,但存在以下逻辑错误:

  • 在递归函数中,当结点同时有左右子树时,计算左子树最大值(per)和右子树最小值(next),但判断条件错误:应为判断“data - per”与“next - data”是否相等,而不是“data - per == next - per”。这里逻辑错误,导致条件判断不正确。
  • 递归返回部分:当条件满足时,返回左子树计数+右子树计数+1;否则返回左子树计数+右子树计数。但递归基处理不完整:当结点为空时未返回0,且叶结点(无左右子树)应返回0,但代码中直接返回0,这部分正确。然而,递归调用没有处理root为NULL的情况,会导致段错误。
  • 函数名拼写错误:find_perc和find_per(可能识别问题),但函数实现正确(找到左子树最大值和右子树最小值)。
  • 全局计数变量缺失:学生使用递归返回值累加,但递归结构有误,且条件判断错误会导致计数不准确。

根据标准答案“次优解”代码(6分版本),学生代码思路正确但实现有逻辑错误,因此扣分。具体扣分:条件判断错误(-3分),递归基不完整(-2分),其他小错误(-1分)。得分为9 - 3 - 2 - 1 = 3分。

(3)得分及理由(满分2分)

学生给出的时间复杂度为O(n log n),但根据标准答案“次优解”,时间复杂度应为O(nh)(h为树高),在平衡树中h=log n,因此为O(n log n),但最坏情况下(链状树)为O(n^2)。学生答案部分正确,但未说明最坏情况,且表述不精确(写为Onlogin,可能为识别错误)。因此扣1分,得1分。

题目总分:3+3+1=7分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发