文章

83

粉丝

0

获赞

0

访问

25.6k

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


评分及理由

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

得分:2分

理由:学生的基本设计思想提到了“采用中序遍历的方式遍历二叉树”,这与标准答案一致,是正确的核心思路。但是,后续描述“每当扫描到叶结点时,判断其是左孩子还是右孩子以及是否有兄弟结点,并以此来选择是‘(’,‘)’,‘+’”存在严重问题。首先,添加括号的逻辑不应基于“是否有兄弟结点”这种模糊条件,而应基于当前结点是否为操作符(分支结点)以及其深度(或所处层次)来决定是否需要为子表达式加括号,以防止运算优先级歧义。其次,描述中出现了“选择是‘(’,‘)’,‘+’”,这里的“+”明显是笔误或识别错误,但结合上下文,它干扰了逻辑的清晰性,表明学生对何时输出操作符、何时输出括号的规则没有正确阐述。因此,设计思想部分存在重大缺陷,扣除3分。

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

得分:3分

理由:学生的代码尝试实现中序遍历并添加括号,但逻辑存在多处错误:
1. 代码结构混乱,对左右子树为空的判断逻辑相互嵌套且重复,导致括号添加的规则错误。例如,在左子树非空但右子树为空时,在遍历左子树前后添加括号;在左子树为空时,在输出操作数前添加左括号,在右子树为空时在最后添加右括号。这些规则不符合表达式树加括号的基本原则(即只为操作符结点的子表达式在非最外层时加括号)。
2. 函数参数使用`BTree tree`而非`BTree* root`,这可能是识别错误(原题定义为指针),但即使按值传递,在递归中也会导致问题,因为修改不会传递。
3. 输出使用`printf("%c", tree.data[0])`,而题目中`data`是字符数组(可能存储多字符操作数如"-d"),这里只输出第一个字符,对于多字符操作数会出错。
4. 整体逻辑无法正确生成示例中的中缀表达式,例如对于简单表达式树,会输出多余的括号或缺少必要括号。
由于代码存在严重的逻辑错误,不能正确实现功能,但鉴于其基本框架是中序遍历,给予一定的思路分。扣除7分。

题目总分:2+3=5分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发