PAT天梯赛题目集:Level2-006.树的遍历
题 : https://www.patest.cn/contests/gplt/L2-006
#include <iostream> #include <vector> using std::cin; using std::cout; std::vector<int> PostOrder_Traversal, InOrder_Traversal; std::vector<int> &post = PostOrder_Traversal, &in = InOrder_Traversal; std::vector<int> LevelOrder_Traversal(10000, -1), &level = LevelOrder_Traversal; void solve(int start, int end, int root, int index) { if (start > end) return; int i = start; while (i < end && in[i] != post[root]) i++; level.at(index) = post.at(root); solve(start, i - 1, root - (end - i) - 1, 2 * index + 1); solve(i + 1, end, root - 1, 2 * index + 2); } int main() { std::ios::sync_with_stdio(false); cin.tie(false); int TreeNode_Num; int &N = TreeNode_Num; int cnt = 0; cin >> N; post.resize(N); in.resize(N); for (int i = 0; i < N; ++i) cin >> post[i]; for (int i = 0; i < N; ++i) cin >> in[i]; solve(0, N - 1, N - 1, 0); for (int i = 0; i < level.size(); ++i) { if (level.at(i) != -1 && cnt++ != N - 1) cout << level.at(i) << ' '; else if (level.at(i) != -1) { cout << level.at(i); break; } } return 0; }