文章

118

粉丝

0

获赞

1

访问

19.0k

头像
2022年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年8月30日 18:30
阅读数 37


评分及理由

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

学生答案的基本设计思想是:利用完全二叉树的性质,只遍历前n/2个结点(非叶子结点),检查每个非空结点的左孩子(如果存在)是否小于等于当前结点,右孩子(如果存在)是否大于等于当前结点。但这种方法存在逻辑错误:二叉搜索树要求左子树所有结点都小于根结点,右子树所有结点都大于根结点,而这里只检查直接孩子结点,无法保证整个子树满足条件(例如,右孩子的左子树可能小于根结点)。因此,该设计思想不能正确判断二叉搜索树。但考虑到学生试图利用二叉树顺序存储的性质,并给出了遍历思路,给部分分数。得分:2分。

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

学生代码实现基于上述错误思想:

  • 代码中使用了错误的索引表达式(如2i+1应为2*i+1),但根据上下文判断为误写(识别问题),不扣分。
  • 逻辑错误:只检查直接孩子结点,而不是整个子树(例如,T2中40的左孩子50大于40,但代码会错误地通过检查,因为50是左孩子但大于父结点,但代码中检查的是左孩子是否大于自身(应检查左孩子是否小于自身)?实际上代码中左孩子检查条件是“左孩子大于自身”时置flag=0,但条件写反了(应为左孩子小于自身时错误?)。仔细分析:学生代码中左孩子检查条件是“如果左孩子存在且左孩子大于当前结点则置flag=0”,这实际上是正确的(因为左孩子应该小于当前结点),但右孩子检查条件是“如果右孩子存在且右孩子小于当前结点则置flag=0”,这也是正确的(因为右孩子应该大于当前结点)。但即使如此,仍无法保证整个子树满足条件(例如,T1中27在30的左子树中,但27<25,不满足二叉搜索树性质,但学生代码无法检测到)。
  • 另外,循环范围只到n/2,会漏掉部分叶子结点(叶子结点没有孩子,不需要检查,但n/2计算可能不准确?实际上非叶子结点索引为0到n/2-1,但顺序存储中数组可能包含空结点(-1),且孩子索引可能超出n/2但小于n,所以循环条件应为i11-1,所以不会检查,但这里孩子不存在,所以不影响?)。但主要问题还是无法递归检查子树。

因此,代码逻辑错误严重,不能正确判断二叉搜索树。但代码结构清晰,尝试了关键检查,给部分分数。得分:3分(其中思路错误扣4分,代码实现基本正确但条件反写?不,这里条件实际是正确的:左孩子大于父结点时错误,右孩子小于父结点时错误。但漏了子树检查,扣主要分)。

题目总分:2+3=5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发