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