DilyaraL

task7int

Dec 5th, 2021
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.46 KB | None | 0 0
  1. struct node {
  2. int 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+" " + to_string(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 + " " + to_string(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, int min, int 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.  
  58.  
  59. в main:
  60. для 7.1
  61. node* root;
  62. root = NULL;
  63. int x =1;
  64. while (x != -1)
  65. {
  66. cin >> x;
  67. root = add(x, root);
  68. }
  69. string s = "";
  70. preorder(root,s);
  71. cout << s;
  72.  
  73. для 7.5
  74. node* root;
  75. root = NULL;
  76. int x =0, max,min;
  77. while (x != -1)
  78. {
  79. cin >> x;
  80. root = add(x, root);
  81. }
  82.  
  83. max=INT_MAX;
  84. min=INT_MIN;
  85. cout <<is_search(root, max, min);
  86.  
Advertisement
Add Comment
Please, Sign In to add comment