文章
161
粉丝
0
获赞
0
访问
20.2k
(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. 逻辑错误:仅检查直接子结点,而不是整个子树,无法正确判断二叉搜索树(...
登录后发布评论
暂无评论,来抢沙发