2017年408考研算法题
题目请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时:输出的等价中缀表达式分别为(a+b)*(c*(-d))和(a*b)+(-(c-d))。二叉树结点定义如下:typedef struct node{char data[10];struct node *left, *right;}BTree;题解分析重
·
题目
请设计一个算法,将给定的表达式树(二叉树)转换为等价的中缀表达式(通过括号反映操作符的计算次序)并输出。例如,当下列两棵表达式树作为算法的输入时:
输出的等价中缀表达式分别为(a+b)*(c*(-d))和(a*b)+(-(c-d))。
二叉树结点定义如下:
typedef struct node{
char data[10];
struct node *left, *right;
}BTree;
题解
分析
重点:括号的安排
1、中缀表达式
左根右
2、计算次序
遍历左子树前加左括号,遍历右子树前加右括号。
代码
void BTreeToE(BTree *root){
BTree *p = root;
if(root->left==NULL && root->right==NULL){
cout<<root->data;
}
else{
cout<<"(";
BTreeToE(root->left);
cout<<root->data;
BTreeToE(root->right);
cout<<")";
}
}
更多推荐
已为社区贡献2条内容
所有评论(0)