题目大意:求一个二叉树的中缀表达式
首先表达式树是不存在左孩子非空,右孩子空的情况。
直接根据中序遍历,不过需要加上()表示运算的优先级,在中序遍历的时候,不是根结点且不是叶子结点输出括号即可。
#include <iostream>
using namespace std;
int n,m,root;
struct node
{
string v;
int l,r;
}e[100];
bool st[100];
void dfs(int u )
{
if(root != u && e[u].r != -1) cout << '(';
if(e[u].l != -1) dfs(e[u].l);
cout << e[u].v;
if(e[u].r != -1) dfs(e[u].r);
if(root != u && e[u].r != -1) cout << ')';
}
int main()
{
cin >> n;
for(int i = 1 ; i <= n ; i++)
{
string c;int l,r;
cin >> c >> l >> r;
if(l != -1) st[l] = 1;
if(r != -1) st[r] = 1;
e[i] = {c,l,r};
}
for(int i = 1; i <= n; i++) if(!st[i]) root = i;
dfs(root);
return 0;
}