文章

161

粉丝

0

获赞

0

访问

20.2k

头像
2022年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年9月16日 17:13
阅读数 68

(1)依次通历,若SqBiTNode[2i+1]<SqBiTNode[i]且SqBiTNode[2i+2]>SqBiTNode[i],则继续遍历,否则返回false,若SqBiTNode[i]=-1,则直接下一循环,直到i=T.ElemNum循环结束,返回true。

(2)bool f(SqBiTNode t)
{
    for(i=0; i<t.ElemNuMlm; i++) {
        if(t.SqBiTNode[i]!=-1) {
            if(t.SqBiTNode[i]<t.SqBiTNode[2i+1]||t.SqBiTNode[i]>t.SqBiTNode[2i+2]) {
                return false;
            }
        }else continue;
    }
    return true;
}


评分及理由

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

学生给出的基本设计思想是:遍历数组,对于每个非-1的结点,检查其左子结点(2i+1)是否小于当前结点,右子结点(2i+2)是否大于当前结点。如果满足则继续,否则返回false。这种方法存在严重逻辑错误,因为二叉搜索树的要求是左子树所有结点均小于根结点,右子树所有结点均大于根结点,而不仅仅是直接子结点。此外,该方法没有考虑子树边界(如子树可能为空或越界)以及递归定义的性质。因此,设计思想不完整且错误。扣4分,得0分。

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

学生代码实现基于上述错误思想:遍历数组,对于每个非-1结点,直接比较左子结点(2i+1)和右子结点(2i+2)的值。但代码存在多个问题:
1. 未检查数组越界:2i+1或2i+2可能超过ElemNum,导致未定义行为。
2. 逻辑错误:仅检查直接子结点,而不是整个子树,无法正确判断二叉搜索树(...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发