文章

119

粉丝

0

获赞

1

访问

8.9k

头像
2017年计算机学科专业基础综合试题 - 第41题回答
数据结构
发布于2025年8月24日 18:06
阅读数 56


评分及理由

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

学生答案的算法思想与标准答案基本一致:通过中序遍历表达式树,并在非根节点且非叶子节点时添加括号。学生提到使用depth记录深度,根节点深度为1时不加括号,这与标准答案中通过深度控制括号添加的策略一致。因此,设计思想正确,得5分。

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

学生给出的代码实现了中序遍历,并在适当位置添加括号。但存在以下问题:

  • 代码中没有处理根节点为NULL的情况,可能引发空指针访问。标准答案中首先检查root是否为NULL,但学生代码未处理,这是一个逻辑错误,扣1分。
  • 学生代码在进入递归前检查左右孩子是否存在来决定是否输出括号,但标准答案中是在递归前后输出括号,且仅当深度大于1时添加。学生代码的逻辑与标准答案类似,但括号添加的条件是“depth !=1 且(左孩子或右孩子存在)”,这可能导致叶子节点(无孩子)被错误添加括号?但学生代码中,叶子节点不会满足条件(因为p->left和p->right均为NULL),所以不会添加括号,这一点正确。然而,学生代码没有显式处理叶子节点,而是直接输出数据,这与标准答案中针对叶子节点的特殊处理不同(标准答案直接输出操作数),但学生代码通过递归条件避免了叶子节点的括号添加,逻辑正确。
  • 学生代码没有考虑操作数为单目运算符(如负号)的情况?但题目中表达式树是二叉树,单目运算符可能只有一个孩子(如负号),学生代码中条件“p->left != NULL || p->right != NULL”对于单目运算符(只有一个孩子)也会满足,因此会添加括号,这与标准答案一致(标准答案中深度大于1时添加括号)。
  • 代码中没有提供主调用函数(如BtreeToE),但题目要求描述算法,关键部分已给出,可不扣分。

综上,代码逻辑基本正确,但缺少对空树的检查,扣1分。得9分。

题目总分:5+9=14分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发