本文主要是介绍1130 Infix Expressio (25 分),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
之前因为偷懒没有刷这道题,结果秋季的PAT考试就考到了。
主要是理解括号的插入位置以及遍历的规则。
首先需要找到根节点,其次是非根节点和叶子点需要加括号。
#include <iostream>
#include <cmath>
#include <algorithm>
#include <vector>
#include <string>
using namespace std;
const int N = 25;
int Root = 1;
struct node{string val;int left, right;
}E[N];
int vis[505];
void dfs(int root){if(root==-1) return;if(root != Root && (E[root].left != -1 || E[root].right != -1)) cout<<"(";dfs(E[root].left);cout<<E[root].val;dfs(E[root].right);if(root != Root && (E[root].left != -1 || E[root].right != -1)) cout<<")";
}
int main(){int n;cin>>n;for(int i = 1; i <= n; i++){cin>>E[i].val>>E[i].left>>E[i].right;if(E[i].left != -1) vis[E[i].left] = 1;if(E[i].right != -1) vis[E[i].right] = 1;}while(vis[Root]) Root++;dfs(Root);return 0;
}
这篇关于1130 Infix Expressio (25 分)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!