文章

121

粉丝

0

获赞

0

访问

14.5k

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

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...

登录查看完整内容


登录后发布评论

暂无评论,来抢沙发