文章

36

粉丝

0

获赞

0

访问

3.7k

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

采用中序遍历,实时比较当前结点与前驱结点值。若出现非递增情况立即终止遍历,返回false

int n = tree.ElemNum;	// 辅助数组存储中序序列
int tmp[n];	//malloc写法
int k=0;	// 数组索引

void inorder(SqBiTree tree, int root){
    // 终止条件:越界或空结点
    if(root>=tree.ElemNum || tree.SqBiTreeNode[root] == -1){
        return; //链:if(root==NULL) return;
    }
    // 递归遍历左子树
    inorder(tree, 2*root+1);
    // 存储当前有效结点值(跳过-1)
    tmp[i++] = tree.SqBiTNode[root];
    // 递归遍历右子树
    inorder(tree, 2*root+2);
}

// 检查数组是否严格递增
bool judge(){
    for(int i=1; i<k; i++){
        if(tmp[i-1] >= tmp[i]){
            return false;
        }
    }
    return true;
}

时间复杂度O(n),空间复杂度O(n)


评分及理由

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

得分:3分

理由:学生给出了中序遍历的基本思路,并提到了实时比较当前结点与前驱结点值,这是正确的。但描述不够完整,没有明确说明如何实现"实时比较"(实际上代码中并没有实现实时比较,而是先存储整个序列再检查),也没有提及二叉搜索树中序遍历递增的性质。基本思想表述基本正确但不够精确。

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

得分:5分

理由:

  • 代码结构基本正确,包含了中序遍历的递归框架
  • 但存在多个逻辑错误:
    1. 使用了未定义的变量i(应该是k)来索引tmp数组
    2. judge函数中使用了未初始化的k值
    3. 没有提供完整的主函数或isValidBST函数封装
    4. 没有处理空树的情况
    5. 数组tmp使用变长数组,但n可能很大时会有栈溢出风险
    6. ...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发