Advertisement
Guest User

Untitled

a guest
Apr 27th, 2018
60
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.82 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. struct Node {
  6. int data;
  7. Node *left;
  8. Node *right;
  9. };
  10.  
  11. int max_tree = 0, lvl = 0;
  12. Node *search_tree = nullptr;
  13.  
  14. void push(Node *uz) {
  15. int gl, gr;
  16. Node *tmpl = new Node;
  17. cin >> gl;
  18.  
  19. if ((gl) != 0) {
  20. tmpl->data = gl;
  21. tmpl->left = nullptr;
  22. tmpl->right = nullptr;
  23. uz->left = tmpl;
  24. push(tmpl);
  25. } else {
  26. tmpl = nullptr;
  27. uz->left = tmpl;
  28. }
  29.  
  30. Node *tmpr = new Node;
  31. cin >> gr;
  32.  
  33. if (gr != 0) {
  34. tmpr->data = gr;
  35. tmpr->left = nullptr;
  36. tmpr->right = nullptr;
  37. uz->right = tmpr;
  38. push(tmpr);
  39. } else {
  40. tmpr = nullptr;
  41. uz->right = tmpr;
  42. }
  43. if (gl * gr != 0) lvl++;
  44. }
  45.  
  46. void add(Node *root) {
  47. cout << "введите корень(0)" << endl;
  48. cin >> (root->data);
  49. root->left = nullptr;
  50. root->right = nullptr;
  51. cout << "вводите вершины('0' означает NULL)" << endl;
  52. push(root);
  53. }
  54.  
  55. int search(Node *root) {
  56. //Если это пустая вершина то из неё есть дерево поиска размера 0
  57. if (root) {
  58. int counter = 1;
  59. int left = search(root->left), right = search(root->right);
  60. if (root->left) {
  61. if (root->left->data < root->data)
  62. if (root->right) {
  63. if (root->right->data >= root->data)
  64. counter += left + right;
  65. } else
  66. //Если нет правого сына то только на левом
  67. counter += left;
  68. }
  69. else if (root->right)
  70. //Иначе только на правом
  71. if (root->right->data >= root->data)
  72. counter += right;
  73. //Если полученное дерево больше найденного ранее - запоминаем его
  74. if (counter > max_tree) {
  75. max_tree = counter;
  76. search_tree = root;
  77. }
  78. return counter;
  79. } else return 0;
  80. }
  81.  
  82. void print(Node *root, int root_value) {
  83. if (root) {
  84. if (root->left) {
  85. if (root->left->data >= root->data) {
  86. root->left = nullptr;
  87. }
  88. }
  89. if (root->right) {
  90. if (root->right->data < root->data || root->right->data > root_value) {
  91. root->right = nullptr;
  92. }
  93. }
  94. print(root->left, min(root->data, root_value));
  95. cout << root->data << ' ';
  96. print(root->right, min(root->data, root_value));
  97. }
  98. }
  99.  
  100. int main() {
  101. setlocale(LC_ALL, "rus");
  102. Node* root = new Node;
  103. add(root);
  104. search(root);
  105. print(search_tree, root->data);
  106. return 0;
  107. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement