文章
121
粉丝
0
获赞
0
访问
14.5k
1)通过二叉树的中序遍历,可以得出他的中缀表达式。如果一个结点有孩子且不是根节点,那就先输出“(”再访问他的左孩子。当一个结点没有孩子,输出该节点。接下来再遍历他的右子树。当右子树遍历到最后一个结点,说明这一段表达式结束,输出“)”。
2)
void expressionMid(BTree T, int depth){
if(T == NULL) return; //空树返回
if(depth > 0 && T->left != NULL || T->right != NULL) printf("(");
expressionMid(T->left, depth+1);
printf(T->data);
expressionMid(T->right, depth+1);
if(depth > 0 && T->left != NULL || T->right != NULL) printf(")");
}
评分及理由
(1)得分及理由(满分5分)
得分:3分
理由:学生基本理解了中序遍历的思想,提到了通过中序遍历输出表达式,并考虑了括号的添加。但是描述不够准确和完整:
- 没有明确说明根节点不需要加括号
- 对括号添加条件的描述比较模糊("不是根节点"、"当右子树遍历到最后一个结点"等表述不准确)
- 没有清晰说明深度参数的作用
基本思路正确但表达不够严谨,扣2分。
(2)得分及理由(满分10分)
得分:6分
理由:代码实现了基本的中序遍历框架,但存在以下逻辑错误:
- 括号添加条件有误:`depth > 0 && T->left != NULL || T->right != NULL` 存在运算符优先级问题,应该是 `(depth > 0 && (T->left != NULL || T->right != NULL))`
- 缺少对叶子节点的特殊处理,标准答案中对叶子节点直接输出,不添加括号
- 函数参数应该是 `BTree*` 而不是 `BTree`
- `printf(T->data)` 语法错误,应该是 `p...
登录后发布评论
暂无评论,来抢沙发