文章
36
粉丝
0
获赞
0
访问
3.7k
采用中序遍历,实时比较当前结点与前驱结点值。若出现非递增情况立即终止遍历,返回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分
理由:
登录后发布评论
暂无评论,来抢沙发