文章
314
粉丝
1
获赞
107
访问
61.4k

评分及理由
(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分
登录后发布评论
暂无评论,来抢沙发