vadimk772336

починил

Nov 23rd, 2021 (edited)
157
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.56 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. print_tree(tree, n);
  122.  
  123. postorderTraversal(&tree[0]);
  124. std::cout << std::endl;
  125. inorderTraversal(&tree[0]);
  126.  
  127. return 0;
  128. }
  129.  
Add Comment
Please, Sign In to add comment