Facebook
From Mateusz, 7 Years ago, written in C++.
Embed
Download Paste or View Raw
Hits: 232
  1. #include <stdexcept>
  2. #include <iostream>
  3. struct Tree
  4. {
  5.         Tree* root;
  6.         Tree* left;
  7.         Tree* right;
  8.         int value;
  9. };
  10.  
  11. class TrainComposition
  12. {
  13. private:
  14.         Tree* tree;
  15. public:
  16.         TrainComposition()
  17.         {
  18.                 tree = new Tree();
  19.                 tree->root = nullptr;
  20.                 tree->left = nullptr;
  21.                 tree->right = nullptr;
  22.                 tree->value = 0;
  23.         }
  24.         ~TrainComposition()
  25.         {
  26.                 delete tree;
  27.         }
  28.         void attachWagonFromLeft(int wagonId)
  29.         {
  30.                 auto *temp = new Tree();
  31.                 temp->root = &findLastLeft(*tree);
  32.                 temp->value = wagonId;
  33.                 temp->root->left = temp;
  34.                 temp->left = nullptr;
  35.                 temp->right = nullptr;
  36.         }
  37.        
  38.         void attachWagonFromRight(int wagonId)
  39.         {
  40.                 auto *temp = new Tree();
  41.                 temp->root = &findLastRight(*tree);
  42.                 temp->value = wagonId;
  43.                 temp->root->right = temp;
  44.                 temp->left = nullptr;
  45.                 temp->right = nullptr;
  46.         }
  47.  
  48.         int detachWagonFromLeft()
  49.         {
  50.                 auto temp = findLastLeft(*tree);
  51.                 if (temp.root == nullptr && temp.root->right != nullptr)
  52.                         return temp.root->right->value;
  53.                 temp.root->left = nullptr;
  54.                 return temp.value;
  55.         }
  56.  
  57.         int detachWagonFromRight()
  58.         {
  59.                 auto temp = findLastRight(*tree);
  60.                 if (temp.root == nullptr && temp.root->left != nullptr)
  61.                         return temp.root->left->value;
  62.                 temp.root->right = nullptr;
  63.                 return temp.value;
  64.         }
  65.  
  66.         Tree& findLastLeft(Tree& t)
  67.         {
  68.                 if (t.left == nullptr)
  69.                         return t;
  70.                 findLastLeft(*t.left);
  71.         }
  72.         Tree& findLastRight(Tree& t)
  73.         {
  74.                 if (t.right == nullptr)
  75.                         return t;
  76.                 findLastRight(*t.right);
  77.         }
  78. };
  79.  
  80. #ifndef RunTests
  81. int main()
  82. {
  83.         TrainComposition tree;
  84.         tree.attachWagonFromLeft(7);
  85.         tree.attachWagonFromLeft(13);
  86.         tree.attachWagonFromRight(8);
  87.         std::cout << tree.detachWagonFromRight() << "\n"; // 7
  88.         std::cout << tree.detachWagonFromLeft(); // 13
  89.         return EXIT_SUCCESS;
  90. }
  91. #endif