Facebook
From Scanty Meerkat, 4 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 199
  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4.  
  5. using namespace std;
  6.  
  7. void input(vector<int>& pre, vector<int>& in)
  8. {
  9.         int n;
  10.  
  11.         cin >> n;
  12.  
  13.         for (int i = 0; i < n; i++)
  14.         {
  15.                 int x;
  16.                 cin >> x;
  17.  
  18.                 pre.push_back(x);
  19.         }
  20.  
  21.         for (int i = 0; i < n; i++)
  22.         {
  23.                 int x;
  24.                 cin >> x;
  25.  
  26.                 in.push_back(x);
  27.         }
  28. }
  29.  
  30. void solve(vector<int>& pre, vector<int>& in, vector<int>& post, vector<int>::iterator left, vector<int>::iterator right, int i)
  31. {
  32.         if (i >= pre.size())
  33.                 return;
  34.  
  35.         if (left >= right)
  36.                 return;
  37.  
  38.         if (left == right - 1)
  39.         {
  40.                 post.push_back(*left);
  41.                 return;
  42.         }
  43.  
  44.         auto pos = find(left, right, pre[i]);
  45.  
  46.         solve(pre, in, post, left, pos, i + 1);
  47.         solve(pre, in, post, pos + 1, right, distance(in.begin(), pos) + 1);
  48.  
  49.         if (find(post.begin(), post.end(), pre[i]) == post.end())
  50.                 post.push_back(pre[i]);
  51. }
  52.  
  53. void output(vector<int>& post)
  54. {
  55.         for (auto i = post.begin(); i != post.end(); i++)
  56.                 cout << *i << " ";
  57.  
  58.         cout << "\n";
  59. }
  60.  
  61. int main()
  62. {
  63.         ios_base::sync_with_stdio(0);
  64.  
  65.         int z;
  66.  
  67.         cin >> z;
  68.  
  69.         while (z--)
  70.         {
  71.                 vector<int> preorder;
  72.                 vector<int> inorder;
  73.                 vector<int> postorder;
  74.  
  75.                 input(preorder, inorder);
  76.  
  77.                 solve(preorder, inorder, postorder, inorder.begin(), inorder.end(),0);
  78.  
  79.                 output(postorder);
  80.         }
  81.  
  82.         return 0;
  83. }
  84.