PAT 1130 Infix Expression
题目链接:
https://pintia.cn/problem-sets/994805342720868352/problems/994805347921805312
思路:
中序遍历,但学习的是判断括号输出的条件。
#include <iostream> #include<cstring> using namespace std; struct Data{ string data; int l,r; }da[25]; int in[25]; int Root; void inOrder(int root){ if(root==-1) return; if(root!=Root&&(da[root].l!=-1||da[root].r!=-1)) printf("("); inOrder(da[root].l); cout<<da[root].data; inOrder(da[root].r); if(root!=Root&&(da[root].l!=-1||da[root].r!=-1)) printf(")"); } int main(int argc, char** argv) { int n; scanf("%d",&n); for(int i=1;i<=n;i++){ cin>>da[i].data>>da[i].l>>da[i].r; if(da[i].l!=-1) in[da[i].l]++; if(da[i].r!=-1) in[da[i].r]++; } int root; for(int i=1;i<=n;i++) if(!in[i]) { root=i; break; } Root=root; inOrder(root); printf("\n"); return 0; }
参考自: