DilyaraL

task7

Dec 2nd, 2021 (edited)
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.28 KB | None | 0 0
  1. struct node {
  2. string value; // поле данных
  3. struct node* left; // левый потомок
  4. struct node* right; // правый потомок
  5. };
  6.  
  7. struct node* add(string x, node* tree) {
  8. if (tree == NULL) { // Если дерева нет, то формируем корень
  9. tree = new node; // память под узел
  10. tree->value = x; // поле данных
  11. tree->left = NULL;
  12. tree->right = NULL; // ветви инициализируем пустотой
  13. }
  14. else if (x < tree->value) // условие добавление левого потомка
  15. tree->left = add(x, tree->left);
  16. else // условие добавление правого потомка
  17. tree->right = add(x, tree->right);
  18. return(tree);
  19. }
  20.  
  21. void preorder(node* tree, string&s)
  22. {
  23. if (tree != NULL) { //Пока не встретится пустой узел
  24. s=s+" " + (tree->value); //Записываем корень дерева
  25. preorder(tree->left, s); //Рекурсивная функция для левого поддерева
  26. preorder(tree->right, s); //Рекурсивная функция для правого поддерева
  27. }
  28. }
  29.  
  30. void postorder(node* tree, string&s)
  31. {
  32. if (tree != NULL) { //Пока не встретится пустой узел
  33. postorder(tree->left, s); //Рекурсивная функция для левого поддерева
  34. postorder(tree->right, s); //Рекурсивная функция для правого поддерева
  35. s = s + " " + (tree->value); //Записываем корень дерева
  36. }
  37. }
  38.  
  39. int height(node*tree) {// корень тоже считаем
  40. if (!tree) return 0;
  41. return 1 + max(height(tree->left), height(tree->right));
  42. }
  43.  
  44. int count(node* tree)
  45. {
  46. if (!tree) return 0;
  47. return 1 + count(tree->left) + count(tree->right);
  48. }
  49.  
  50. bool is_search(node* tree, string min, string max) {//min вначале это самое левое значение, а max - самое правое
  51. if (!tree) return true;
  52. if ((min <= tree->value) && (tree->value <= max))
  53. return (is_search(tree->left, min, tree->value) && is_search(tree->right, tree->value, max));
  54. return false;
  55. }
  56.  
  57. string tree_min(node* tree, string s)
  58. {
  59. if (!tree) return s;
  60. else
  61. {
  62. s = tree->value;
  63. return tmin(tree->left, s);
  64. }
  65. }
  66.  
  67. string tree_max(node* tree, string s)
  68. {
  69. if (!tree) return s;
  70. else
  71. {
  72. s = tree->value;
  73. return tmax(tree->right, s);
  74. }
  75. }
  76.  
  77.  
  78. в main:
  79. для 7.1
  80. node* root;
  81. root = NULL;
  82. string x ="1";
  83. while (x != "stop")
  84. {
  85. cin >> x;
  86. root = add(x, root);
  87. }
  88. string s = "";
  89. task7_1(root,s);
  90. cout << s;
  91.  
  92. для 7.2
  93. node* root;
  94. root = NULL;
  95. string x ="1";
  96. while (x != "stop")
  97. {
  98. cin >> x;
  99. root = add(x, root);
  100. }
  101. string s = "";
  102. task7_1(root,s);
  103. cout << s;
  104.  
  105. для 7.3
  106. node* root;
  107. root = NULL;
  108. string x ="1";
  109. while (x != "stop")
  110. {
  111. cin >> x;
  112. root = add(x, root);
  113. }
  114. cout <<task7_3(root);
  115.  
  116. для 7.4
  117. node* root;
  118. root = NULL;
  119. string x ="1";
  120. while (x != "stop")
  121. {
  122. cin >> x;
  123. root = add(x, root);
  124. }
  125. cout <<task7_4(root);
  126.  
  127. для 7.5
  128. node* root;
  129. root = NULL;
  130. string x ="1";
  131. while (x != "stop")
  132. {
  133. cin >> x;
  134. root = add(x, root);
  135. }
  136.  
  137. string max = tree_max(root, ""), min=tree_min(root,"");
  138. cout <<task7_5(root, max, min);
  139.  
Add Comment
Please, Sign In to add comment