文章

5

粉丝

0

获赞

0

访问

2.2k

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


评分及理由

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

学生答案的基本设计思想是遍历二叉树,对于有左右子树的节点,找到左子树的最右节点(最大值)和右子树的最左节点(最小值),然后计算当前节点与这两个值的差,若相等则计数。这一思路利用了二叉搜索树的性质,与标准答案中的“次优解”一致,思路正确。因此得3分。

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

学生代码尝试使用层次遍历(队列)实现,但存在多处逻辑错误:
1. 队列声明为`TreeNode BT[MAX_SIZE]`,但应为指针队列(或正确存储节点),且未处理空树情况。
2. 在循环中错误使用`root`(应使用`BT[front]`)来访问当前节点,导致逻辑混乱(例如`if (root->left)`应为`if (BT[front]->left)`)。
3. 变量`q`声明为`TreeNode* q`误写为`TreeNode* q`(但识别可能错误,实际代码中可能为指针),但未初始化且使用有风险。
4. 计算差值时,左子树差应为`当前节点值 - 左子树最大值`,右子树差应为`右子树最小值 - 当前节点值`,但代码中直接使用`BT[front]->val - left_max`和`right_min - BT[front]->val`,这一步正确。
5. 计数器`count`未初始化(应初始化为0)。
6. 队列操作中,入队的是`root->left`和`root->right`(错误),应为`BT[front]->left`和`BT[front]->right`。
由于代码存在严重逻辑错误,无法正确运行,但核心算法步骤(找最右和最左节点)正确。根据标准答案“次优解”代码(6分)为基础,扣除逻辑错误分(-3分),得3分。

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

学生给出的时间复杂度为O(nlog₂n),但根据其思路(层次遍历+每个节点查找最左/最右路径),实际应为O(nh)(h为树高)。在平衡树中h=log₂n,因此O(nh)=O(nlog₂n)成立,但一般情况不精确。标准答案“次优解”时间复杂度为O(nh),学生答案部分正确。得1分。

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

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发