原题链接
个人思考
题目意思:根据输入的矩阵表示的表达式树来让我们求出与之等价的中缀表达式,因为中缀表达式,我第一个思路就是中序遍历二叉树来进行解决,所以我的思路
1根据输入的矩阵建立二叉树,找到对应的根结点
2 二叉树建立后,有一个很重要的事情就是: 树中分支结点所对应的子表达式的计算次序由该分支的结点所处的为止所决定,越往上的结点越后计算
#include <iostream>
#include<iostream>
#include <string.h>
using namespace std;
typedef struct Node{
string data;
Node * left=NULL;
Node * right=NULL;
Node * prenode=NULL;
}BNode;
void BtreeToExp(Node *root,int deep){
if(root==NULL) return ;
else if (root->left==NULL&&root->right==NULL){
cout<<root->data;
}
else{
if(deep>1) printf("(");
BtreeToExp(root->left,deep+1);
cout<<root->data;
BtreeToExp(root->right, deep+1);
if(deep>1) printf(")");
}
}
int findFirst(BNode Bitree[],int length){
for(int i=1;i<=length;i++){
if(Bitree[i].prenode==NULL){
return i;
}
}
return 0;
}
int main(int argc, const char * argv[]) {
int num;
scanf("%d",&num);
BNode Bitree[num+1];
BNode *first;
for(int i=1;i<=num;i++){
int le,ri;
cin>>Bitree[i].data;
cin>>le>>ri;
if(le!=-1){
Bitree[i].left=&Bitree[le];
Bitree[le].prenode=&Bitree[i];
}
if(ri!=-1){
Bitree[i].right=&Bitree[ri];
Bitree[ri].prenode=&Bitree[i];
}
}
first= &Bitree[findFirst(Bitree, num+1)];
BtreeToExp(first,1);
return 0;
}