题干:1086 Tree Traversals Again (25 分)
- 题解:做了一个小时,满分。其实我主要的时间都是去学习如何读取一整行的数据上面,而且我想要用c++提供的string来接收,因为后续会方便很多,所以试了不少的方法。最后才在代码里面选择了一种可行的。。。
- 这一道题其实它核心的难点是二叉树的建立相关的知识点,这道题不是直接考你模板,但是掌握模板同样很重要,而且模板不仅仅是要会记的下来,还要会理解。。。因为这样会给你自己需要编写用途相似的程序的时候提供设计的思路。。。。通过这题,我还是想提醒不少备考PAT的同学的(也提醒我自己),PAT其实是需要你在考场上面进行试错的,就是说一道题的数据处理的方式,你需要一个从个例再到一般化的过程。。。或者说一个充满bug的程序到一个能够应对所有测试点的过程,如果希望一下子找到答案,最终你会失望,然后变的紧张。。。然后一场考试就崩了,其实PAT是给你留了独立建模思考的时间,做PAT的感觉有点像做英语阅读题。。。。你不太可能一下子就知道文章要讲什么,你需要通过上下文一点点的去推断求精,那个思考的过程和方式是接近的。。。
-
// A1086.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <bits/stdc++.h> using namespace std; struct node { int val; node* left; node* right; node() { left = right = NULL; } }; vector<int> ans; void post(node* root) { if (root->left != NULL) post(root->left); if (root->right != NULL) post(root->right); ans.push_back(root->val); } int main() { #ifndef ONLINE_JUDGE FILE* s1; freopen_s(&s1, "in.txt", "r", stdin); #endif // !ONLINE_JUDGE int n; cin >> n; string t; int a; stack<node*> s; cin >> t >> a; node* root = new node(); root->val = a; s.push(root); node* top = s.top(); getline(cin, t);//直接用getline去除也是可以的 //cin.get();//如果都是使用getline没有关系,如果有使用别的 //要用这个语句来去除干扰 for (int i = 1; i < 2 * n; i++) { getline(cin, t); if (t.size() == 3) {//pop top = s.top(); s.pop(); } else { //t.size() == 4 push a = stoi(t.substr(4)); node* k = new node(); k->val = a; if (top->left == NULL) { top->left = k; } else if (top->right == NULL) { top->right = k; } s.push(k); top = s.top(); } } post(root); cout << ans[0]; for (int i = 1; i < ans.size(); i++) { cout <<" "<< ans[i]; } return 0; }