文章

63

粉丝

0

获赞

0

访问

3.2k

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

1.中序遍历表达式树,当前结点为运算符号且不为根节点,遍历左孩子前输出左括号;当前结点为运算符号且不为根节点,遍历右孩子后输出右括号

2.

    void coutExpression(node* root){
        //从根节点开始遍历
        MidOrder(root,0);
    }
    void MidOrder(node *root,int floor){
        if(root!=null){
            // 当前结点为运算符号且不为根节点,遍历左孩子前输出左括号
            if((root.data=='+'||'-'||'*'||'/')&&(floor!=0)) {
                cout<<'(';
            }
            MidOrder(root.left,floor++);
            cout<<root.data;
            MidOrder(root.right,floor++);
            // 当前结点为运算符号且不为根节点,遍历右孩子后输出右括号
            if((root.data=='+'||'-'||'*'||'/')&&(floor!=0)) {
                cout<<')';
            }
        }
    }

 


评分及理由

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

得分:2分

理由:学生基本理解了需要中序遍历表达式树,并认识到需要添加括号来反映计算次序。但是设计思想存在明显问题:

  • 没有理解括号添加的正确时机和条件,错误地认为只要当前节点是运算符且不是根节点就需要加括号
  • 没有考虑运算符优先级和表达式层次深度的概念
  • 括号添加策略会导致过度添加括号或添加位置错误

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

得分:4分

理由:代码实现存在多处逻辑错误:

  • 语法错误:条件判断中root.data=='+'||'-'||'*'||'/'写法错误,应该分别判断
  • 逻辑错误:floor参数传递使用fl...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发