vadimk772336

принята

Nov 23rd, 2021
703
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.53 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. struct Node
  4. {
  5.     int key;
  6.     Node* left;
  7.     Node* right;
  8.     Node* parent;
  9. };
  10.  
  11. void preorderTraversal(Node* x)
  12. {
  13.     if (x != NULL)
  14.     {
  15.         std::cout << x->key << " ";
  16.         preorderTraversal(x->left);
  17.         preorderTraversal(x->right);
  18.     }
  19.     return;
  20. }
  21.  
  22. void inorderTraversal(Node* x)
  23. {
  24.     if (x != NULL)
  25.     {
  26.         inorderTraversal(x->left);
  27.         std::cout << x->key << " ";
  28.         inorderTraversal(x->right);
  29.     }
  30.     return;
  31. }
  32.  
  33. void postorderTraversal(Node* x)
  34. {
  35.     if (x != NULL)
  36.     {
  37.         postorderTraversal(x->left);
  38.         postorderTraversal(x->right);
  39.         std::cout << x->key << " ";
  40.     }
  41.     return;
  42. }
  43.  
  44. void print_tree(Node* tree, int n)
  45. {
  46.     std::cout << std::endl;
  47.     for (int i = 0; i < n; ++i)
  48.     {
  49.         std::cout << "i= " << tree[i].key << ": ";
  50.         if (tree[i].left != NULL)
  51.             std::cout << tree[i].left->key << " ";
  52.         if (tree[i].right != NULL)
  53.             std::cout << tree[i].right->key << " ;";
  54.         std::cout << std::endl;
  55.     }
  56.     std::cout << std::endl;
  57. }
  58.  
  59. void find_parent(Node* max_vertex, Node* tree, Node* new_vertex)
  60. {
  61.  
  62.     if (tree[0].key <= new_vertex->key && tree[0].right == NULL)
  63.     {
  64.         new_vertex->parent = &tree[0];
  65.         tree[0].right = new_vertex;
  66.     }
  67.  
  68.     else if (max_vertex->key <= new_vertex->key && max_vertex->right == NULL)
  69.     {
  70.         new_vertex->parent = max_vertex;
  71.         max_vertex->right = new_vertex;
  72.     }
  73.  
  74.     else if (max_vertex->right != NULL)
  75.         find_parent(max_vertex->right, tree, new_vertex);
  76.  
  77.     else
  78.         find_parent(max_vertex->left, tree, new_vertex);
  79. }
  80.  
  81. int main()
  82. {
  83.     int n;
  84.     int max = -1;
  85.  
  86.     std::cin >> n;
  87.  
  88.     Node tree[n];
  89.  
  90.     tree[0].right = NULL;
  91.     tree[0].left = NULL;
  92.     tree[0].parent = NULL;
  93.     std::cin >> tree[0].key;
  94.  
  95.     Node* max_vertex = &tree[0];
  96.  
  97.     for (int k = 1; k < n; ++k)
  98.     {
  99.  
  100.         tree[k].right = NULL;
  101.         tree[k].left = NULL;
  102.         tree[k].parent = NULL;
  103.         std::cin >> tree[k].key;
  104.  
  105.         if (tree[k].key < tree[k - 1].key)
  106.         {
  107.             tree[k - 1].left = &tree[k];
  108.             tree[k].parent = &tree[k - 1];
  109.         }
  110.  
  111.         else
  112.             find_parent(max_vertex, tree, &tree[k]);
  113.  
  114.         if (max < tree[k].key)
  115.         {
  116.             max = tree[k].key;
  117.             max_vertex = &tree[k];
  118.         }
  119.     }
  120.  
  121.     postorderTraversal(&tree[0]);
  122.     std::cout << std::endl;
  123.     inorderTraversal(&tree[0]);
  124.  
  125.     return 0;
  126. }
  127.  
Advertisement
Add Comment
Please, Sign In to add comment