题目
https://pintia.cn/problem-sets/994805342720868352/problems/994805347921805312
题意
给出一颗二叉树,输出其前缀表达式,并用括号表示运算优先级
代码解析
首先,因为根节点肯定不是某个节点的左右子节点,所以通过该特点找到根节点
接着,按照左根右的顺序实现dfs递归,通过判断当前节点的右节点是否为空判断其是否为叶子节点,如果不是就继续递归。在递归过程中,为不是根节点的节点的值加上左右括号
AC代码
#include<bits/stdc++.h>
using namespace std;
struct node{
string s;
int l,r;
};
vector<node> vec;
int n,root=1;
string dfs(int index)
{
if(index==-1) return "";
if(vec[index].r!=-1)
{
vec[index].s=dfs(vec[index].l)+vec[index].s+dfs(vec[index].r);
if(index!=root) vec[index].s='('+vec[index].s+')';
}
return vec[index].s;
}
int main()
{
cin>>n;
vec.resize(n+1);
vector<int> vis(n+1,0);
for(int i=1;i<=n;i++)
{
cin>>vec[i].s>>vec[i].l>>vec[i].r;
if(vec[i].l!=-1) vis[vec[i].l]=1;
if(vec[i].r!=-1) vis[vec[i].r]=1;
}
while(vis[root]) root++;
cout<<dfs(root)<<endl;
}