文章

35

粉丝

0

获赞

0

访问

1.6k

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


评分及理由

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

学生答案的基本设计思想是使用后序遍历,向上层传递子树的最小值和最大值(即数组{min, max}),并利用这些信息判断当前结点是否满足条件。该思路与标准答案中的最优解一致,利用了二叉搜索树的性质,通过后序遍历维护子树的最小值和最大值,从而避免重复遍历。思路描述清晰,符合题目要求。得3分。

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

学生代码实现了后序遍历,并尝试维护子树的最小值和最大值,但在关键逻辑上存在错误:

  • 判断条件if(val + val == l[1] + r[0])有误。正确条件应为计算左子树的最大值与当前结点值的差(即val - l[1])和右子树的最小值与当前结点值的差(即r[0] - val),并比较这两个差是否相等。学生代码直接比较2*vall[1] + r[0],这是数学错误,会导致判断失效。
  • 代码中多处语法错误:如int * l = dfs(root->left), r = dfs(root->right);应为int *l = dfs(root->left), *r = dfs(root->right);(缺少*);return {0, 0};在C语言中非法,应返回具体数组或指针;内存分配未释放可能导致泄漏。
  • 边界处理不完善:当子树为空时,返回的数组值应能标识不存在(如标准答案用-1),但学生代码返回{0,0},且0可能与实际结点值冲突(结点值均为正数,但0不是正数)。

尽管整体思路正确,但关键判断逻辑错误和语法问题导致代码无法正确运行。根据标准答案,最优解代码满分9分,但因此处有严重逻辑错误,扣5分;语法错误扣2分;边界处理不完善扣1分。得1分。

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

学生正确指出时间复杂度为O(n),与最优解一致。得2分。

题目总分:3+1+2=6分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发