文章
266
粉丝
1101
获赞
1683
访问
136w
### 41. 1) 遍历每个元素及其孩子结点,若左右孩子均存在,则比较根该结点信息及其孩子结点值的大小,不满足左孩子值<根结点值<右孩子值,则直接返回false;若左孩子不存在或右孩子,重复上述判断。 2) ```cpp bool function(SqBiTree T) { for (int i = 0; i < T.ElemNum; ++i) { if (T.SqBiTNode[2 * i + 1] != -1 && T.SqBiTNode[2 * i + 2] != -1) { if (T.SqBiTNode[2 * i + 1] > T.SqBiTNode[i] || T.SqBiTNode[i] > T.SqBiTNode[2 * i + 2]) return false; } else if (T.SqBiTNode[2 * i + 1] != -1 && T.SqBiTNode[2 * i + 2] == -1) { if (T.SqBiTNode[2 * i + 1] > T.SqBiTNode[i]) return false; } else if (T.SqBiTNode[2 * i + 2] != -1 && T.SqBiTNode[2 * i + 1] == -1) { if (T.SqBiTNode[2 * i + 2] < T.SqBiTNode[i]) return false; } } return true; } ```
评分及理由
(1)得分及理由(满分4分)
得分:2分
理由:学生的基本设计思想存在逻辑错误。二叉搜索树的定义不仅仅是当前节点与其直接左右孩子的关系,而是整个左子树的所有节点都要小于当前节点,整个右子树的所有节点都要大于当前节点。学生的方法只检查了直接孩子节点,忽略了子树的其他节点,因此无法正确判断是否为二叉搜索树。
(2)得分及理由(满分9分)
得分:4分
理由:学生的代码实现与设计思想一致,但同样存在逻辑错误。代码只检查了当前节点与其直接左右孩子的关系,没有考虑整个子树的情况。此外,代码没有处理数组越界的情况(例如当2*i+1或2*i+2超过数组大小时),可能导致未定义行为。因此,代码的正确性不足。
题目总分...
登录后发布评论
暂无评论,来抢沙发