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;
}

 参考自:

 https://blog.csdn.net/qq_34594236/article/details/63683814

posted @ 2018-12-04 21:05  xzhws  阅读(184)  评论(0编辑  收藏  举报