文章

59

粉丝

0

获赞

1

访问

12.1k

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

看2017年的算法题,我的思路是
(1)等价中缀表达式即为原二叉树的中序遍历序列,仅需要对二叉树进行中序遍历即可得到结果,每次调用时传递节点在数组中的对应位置
(2)
int i=1;//设数组从1开始存储数据
void MidOrder(BTree root,int i)
{
if(root!=NULL)
{
if(root->left!=NULL) MidOrder(root->left,2i);
if(root->left==NULL){cout<<"("<<data[2i]}//访问到左子树叶子节点时,输出数组
cout<<data[i];
if(root->right==NULL)MidOrder(root->right,2i+1)
if(root->right==NULL)cout<<data[2i+1]<<")";
}
}


评分及理由

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

得分:3分

理由:学生的设计思想提到了中序遍历,这是正确的,但忽略了关键点——需要根据操作符的位置添加括号以确保计算顺序正确。学生没有明确说明何时需要添加括号,仅简单提到中序遍历,因此扣2分。

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

得分:4分

理由:

  • 代码逻辑错误:学生试图通过数组索引(2i和2i+1)访问左右子树,但题目中二叉树是通过指针(left和right)连接的,并未使用数组存储,因此该逻辑完全不适用,扣3分。
  • 括号添加逻辑错误:学生仅在左子树为NULL时输出"(",右子树为NULL时输出")",这与实际需求(根据深度或操作符优先级添加括号)不符,扣2分。
  • 语法错误:代码中存在拼写错误(如“==NULL)”应为“==NULL)”),且未正确处理操作数和操作符的输出逻辑,扣1分。

题目总分:3+4=7分

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发