文章
8
粉丝
0
获赞
1
访问
582
1.采用中序遍历的思想,用flag表示遍历的方向,当往左遍历时为1,此时为NULL,输出左括号,往右时为2,此时为NULL,输出右括号,不为NULL,输出当前值
2.
void func(BiTree* tree,int flag){ //tree为当前访问节点,flag为标记 if(tree != NULL){ func(tree->left,1); printf("%s", tree->data); // 输出操作数 func(tree->right,2); }else if(flag==1){ printf("%s","(");//方向左边,输出左括号 }else if(flag == 2){ printf("%s",")");//方向右边,输出右括号 } }
评分及理由
(1)得分及理由(满分5分)
得分:3分
理由:学生的基本设计思想提到了中序遍历,这是正确的。但关于括号的处理方式描述不够准确,没有明确说明何时需要加括号(如仅在非根节点且非叶子节点时需要加括号),且flag的使用方式与标准答案不同,可能导致括号添加不正确。因此扣2分。
(2)得分及理由(满分10分)
得分:5分
理由:学生的代码实现了中序遍历,但括号处理逻辑存在严重问题。代码中当节点为NULL时根据flag输出括号,这会导致在叶子节点的左右子树(均为NULL)时错误地输出括号,从而破坏表达式的正确性。此外,未正确处理根节点和叶子节点的括号添加规则。因此扣5分。
题目总分:3+5=8分
登录后发布评论
暂无评论,来抢沙发