给一个二叉树,输出中缀表达式,且加上括号表示运算的优先级~~。 参考柳神的做法 柳婼代码链接 坑点如下 1,给二叉树各节点赋值高度的方法 2,中缀表达式递归的写法 如果当前为叶子结点,直接返回自己的字符串,如果为非叶子结点(右子树不为空),那么返回递归左+当前字符串+递归右结点,并加上括号。如果左右结点有空的,返回字符串""
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
#include<cmath>
using namespace std;
struct Node{
string data;
int lchild;
int rchild;
int height;
}node[25];
bool isroot[25];
int n;
int root=-1;
string DFS(int index){
if(index==-1)return "";
if(node[index].rchild!=-1){
node[index].data=DFS(node[index].lchild)+node[index].data+DFS(node[index].rchild);
if(index!=root)node[index].data='('+node[index].data+')';
}
return node[index].data;
}
int main(){
scanf("%d",&n);
string temp;
memset(isroot,true,sizeof(isroot));
int l,r;
for(int i=1;i<=n;i++){
cin>>node[i].data;
scanf("%d%d",&node[i].lchild,&node[i].rchild);
if(node[i].lchild!=-1)isroot[node[i].lchild]=false;
if(node[i].rchild!=-1)isroot[node[i].rchild]=false;
}
for(int i=1;i<=n;i++){
if(isroot[i]){root=i;
break;}
}
cout<<DFS(root);
return 0;
}
|