通过海量题库、编程比赛和实时排名,系统化提升您的编程能力。
"考研真题" 试卷中 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计算机统考真题在线评测(附答案)
下列关于栈的叙述中,正确的是
Java中类ObjectOutputStream支持对
使用 turtle 库的 turtle.fd函数和
下列程序使用指针编程逆序打印输入的10个整数。请仔细阅
有两个关系R、S如下:由关系R通过运算得到关系S,所使
下面描述中,不属于软件危机表现的是( )。
有以下程序程序运行后的输出结果是( )。
有以下程序程序运行后的输出结果是。
在编写多层循环时,为了提高运行效率,应尽量減少内循环中
表达式set([1,1,2,3])的值为_______
已知x=[1,2,3,4,5],那么执行语句x[1::
Python标准库os.path中用来判断指定路径是否
若x=0123,则表达式(5+(int)(x)&(-2
给定程序MODI1.C中函数fun的功能是:将s所指字
设有定义:int k=0;,下列选项的4个表达式中与其
下列二叉树中,可能成为折半查找判定树(不含外部结点)的
在Linux2.4.0版本中,进程有 ______ 种
下列关于/etc/fstab文件描述,正确的是____
若输入序列为1,2,3,4,5,6,则通过一个栈可以输
软件生存周期一般可分为 、可行性研究、 、设计
某内存条包含 8 个 8 192×8 192×8 位的
静态变量和外部变量的初始化是在_____阶段完成的,而
以下叙述中正确的是
在8位二进制补码中,10101011表示的数是十进制下
现有一只青蛙,初始时在 n 号荷叶上。当它某一时刻在
本题中,我们约定布尔表达式只能包含p, q, r三个布
输入: 30输出: _________
(最大连续子段和)给出一个数列(元素个数不多于 100
书架上有 4 本不同的书 A、B、C、D。其中 A 和
在关系数据库中,存放在数据库中的数据的逻辑结构以( )
更多选择题
更多填空题
第十章 C++流
第九章 C++模板
第八章 C++运算符重载
C++语言程序设计真题5
C++语言程序设计真题4
C++语言程序设计真题3
C++语言程序设计真题2