问题描述:给定一个表达式的二叉树形式,求中序表达式,并加括号。
解题思路:直接用数组存储即可,然后中序遍历,最外层没括号。
AC代码:
#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
#define MAX 25
typedef struct node{
string str;
int right,left;
}node;
node nod[MAX];
bool tag[MAX]={0};//找出根
void inorder(int v,int l)//有孩子,先加括号,访问左子树,再根,再右子树,再加括号
{
if(v<0)return;
if((nod[v].left!=-1||nod[v].right!=-1)&&l>0)printf("(");//下一层应该加括号,但最外层不加。
inorder(nod[v].left,l+1);
printf("%s",nod[v].str.c_str());
inorder(nod[v].right,l+1);
if(nod[v].right!=-1&&l>0)printf(")");//右子树不为空,应该加括号
}
int main()
{
freopen("test.txt","r",stdin);
int i,N,root;
scanf("%d",&N);
for(i=1;i<=N;++i){
cin>>nod[i].str>>nod[i].left>>nod[i].right;
if(nod[i].left!=-1)tag[nod[i].left]=1;
if(nod[i].right!=-1)tag[nod[i].right]=1;
}
for(i=1;i<=N;++i){//找根
if(!tag[i])break;
}
inorder(i,0);
return 0;
}