通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"考研真题" 试卷中 2017年考研408计算机统考真题在线评测(附答案) 中有题目如下:
第1题
请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时,输出的等价中缀表达式分别为(a+b) * (c * (-d)和(a * b)+(-(c-d))。
二叉树结点定义如下:
typedef struct node{ char data[10]; //存储操作数或操作符 struct node *left, *right; }BTree;
请回答下列问题。
(1)给出算法的基本设计思想。
(2)根据设计思想,采用C或C++语言描述算法,关键之处给出注释。
答:
(1)算法的基本设计思想
表达式树的中序序列加上必要的括号即为等价的中缀表达式。可以基于二叉树的中序遍历策略得到所需的表达式。(3分)
表达式树中分支结点所对应的子表达式的计算次序,由该分支结点所处的位置决定。为得到正确的中缀表达式,需要在生成遍历序列的同时,在适当位置增加必要的括号。显然,表达式的最外层(对应根结点)及操作数(对应叶结点)不需要添加括号。
(2)算法实现(10分)
void BtreeToE(BTree *root) { BtreeToExp(root,1); //根的高度为1 } void BtreeToExp(BTree *root, int deep) { if(root == NULL) return; else if(root->left == NULL && root->right == NULL)//若为叶结点 printf("%s",root->data);//输出操作数 else { if(deep>1) printf("(");//若有子表达式则加1层括号 BtreeToExp(root->left,deep+1); printf("%s",root->data); //输出操作符 BtreeToExp(root->right,deep+1); if(deep>1) printf(")");//若有子表达式则加1层括号 } }
所属试卷:2017年考研408计算机统考真题在线评测(附答案)
在一个派生类的成员函数中,试图调用其基类的成员函数“v
正方形绘制。使用 turtle 库,绘制一个边长值为
以下代码的输出结果是( )。
函数fun功能是:将a、b中的两个两位正整数合并形成一
软件生命周期可分为定义阶段、开发阶段和维护阶段。详细设
下列叙述中正确的是( )。
有以下程序程序运行后的输出结果是。
若有定义语句:则表达式x-=x+x的值为。
表达式’abcdefg’.split(‘d’)的值为_
定义一个结构体,其中包括:职工号、职工名、年龄、工资、
以通信子网为中心的计算机网络称为( )
shell脚本程序test(具有可执行权限)只有如下两
将/home/stud1/wang目录做归档压缩,压缩
下面哪个文件定义了网络服务的端口?
数据库逻辑设计主要是将 转换为DBMS能处理的
关系模型的三要素是数据结构、 和
参照完整性要求外码的值必须取 ,或等于被参照关系
实体完整性规则要求主属性码取值 。
关系代数中传统的集合运算包括:并、交、差和 四种
Mysqldump语句使用 _____参数可实现备份整
不属于“TCP/IP属性”对话框选项
SQL语句中的条件用以下哪一项来表达( )
关于insert语句下列说法正确的是
OSI 参考模型的第 5 层(自下而上)完成的主要功能
软件测试的方法有 和 (即黑盒法)。
(归并第 k 小)已知两个长度均为 n 的有序数组 a
预处理命令行都必须以_____号开始。
程序段:循环体语句执行_____次。
带链栈空的条件是
假设输入的 n,k 和 d[i] 都是不超过 1000
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2