文章

314

粉丝

1

获赞

107

访问

61.4k

头像
2017年(408)计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年12月2日 17:37
阅读数 71


评分及理由

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

得分:3分

理由:学生的基本设计思想提到了区分叶子结点和非叶结点,采用中序遍历,并在非根非叶结点时加括号。这与标准答案中“基于中序遍历,在适当位置加括号”的核心思想一致。但学生的描述存在不严谨之处:①“非叶结点包括非根与根结点两种情况”表述冗余(所有非叶结点即分支结点,根结点也可能是分支结点);②“遇到非根非叶结点时加上左右括号再输出”未明确如何判断“非根非叶”,实际上标准答案通过深度参数控制,仅对深度大于1的分支结点加括号。由于思路主体正确,但细节描述不够准确,扣2分。

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

得分:4分

理由:学生的代码框架大致遵循中序遍历,并尝试在非叶结点处添加括号,但存在多处逻辑错误和实现问题:
1. 递归终止条件中,对叶子结点的输出使用了printf("%d",T->data)printf("%c",T->data),而题目中data是字符数组(可能存储多字符操作数或操作符),应使用%s格式输出,此处格式错误会导致输出错误。
2. 非叶结点处理中,直接输出左括号,然后递归左子树,再输出当前结点数据,再递归右子树,最后输出右括号。这种方法会在所有非叶结点(包括根结点)外加括号,导致最外层也出现多余括号,不符合题目要求(根结点不应加括号)。标准答案通过deep>1控制只有子表达式才加括号。
3. 代码中printf("%c","(")printf("%c",")")存在类型不匹配(字符串字面量传递给%c),应直接写printf("(")
4. printf("%d",*(T->data))同样存在格式和类型错误。
5. 函数命名为Inorder,未体现表达式转换的功能,且未处理深度参数,无法正确控制括号添加。
由于代码存在严重的逻辑错误(括号添加策略错误)和输出格式错误,但整体结构尚可,给予4分。

题目总分:3+4=7分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发