Tark_Wight

Untitled

Mar 5th, 2023
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.11 KB | None | 0 0
  1. #include <iostream>
  2. #include <fstream>
  3. #include <vector>
  4. #include <queue>
  5.  
  6.  
  7. // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  8. // _ _ _ СТРУКТУРА УЗЛА ДЕРЕВА _ _ _
  9. // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  10. struct Node {
  11. int key;
  12. Node* left = nullptr;
  13. Node* right = nullptr;
  14. Node(int key, Node* left, Node* right) {
  15. this->key = key;
  16. this->left = left;
  17. this->right = right;
  18. }
  19. };
  20.  
  21. //_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  22. // _ _ _ ФУНКЦИИ ОБРАБОТКИ ВЕКТОРА И ДЕРЕВА _ _ _
  23. //_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  24. Node* addNode(int key, Node* left, Node* right) {
  25. Node* node = new Node(key, left, right);
  26. return node;
  27. }
  28.  
  29.  
  30. int midOfVector(int start, int end) {
  31. return start + (end - start) / 2;
  32. }
  33.  
  34.  
  35. Node* vectorToBST(std::vector <int> vector, int start, int end);
  36.  
  37. Node* newRoot(std::vector<int> vector, int start, int end) {
  38. return addNode(vector[midOfVector(start, end)],vectorToBST(vector, start, midOfVector(start, end) - 1), vectorToBST(vector, midOfVector(start, end) + 1, end));
  39. }
  40.  
  41. void exit() { return; }
  42.  
  43. Node* vectorToBST(std::vector <int> vector, int start, int end) {
  44. return start > end ? nullptr : newRoot(vector, start, end);
  45. }
  46.  
  47. //int vectorSize(vector <int> vector) {
  48. // return vector.size();
  49. //}
  50.  
  51. //_ _ _ _ _ _ _ _ _ _ _ _ _ _
  52. // _ _ _ ЧТЕНИЕ С ФАЙЛА _ _ _
  53. //_ _ _ _ _ _ _ _ _ _ _ _ _ _
  54. std::vector<int> readFile() {
  55. std::ifstream fin("input6.txt");
  56. std::vector<int> data;
  57. std::copy(std::istream_iterator<int>(fin), std::istream_iterator<int>(), std::back_inserter<std::vector<int> >(data));
  58. return data;
  59. }
  60.  
  61. // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  62. // _ _ _ ВЫВОД ЧЕРЕЗ BFS С QUEUE _ _ _
  63. // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  64. void recursiveBFS(Node* node, std::queue<Node*> &queueData, int amountOfKeys);
  65.  
  66. void addQueue(Node* node, std::queue<Node*> &queueData, int amountOfKeys) {
  67. std::cout << queueData.front()->key << " ";
  68.  
  69. queueData.front()->left != nullptr ? queueData.push(queueData.front()->left) : queueData.push(nullptr);
  70. queueData.front()->right != nullptr ? queueData.push(queueData.front()->right) : queueData.push(nullptr);
  71. queueData.pop();
  72.  
  73. recursiveBFS(node, queueData, amountOfKeys - 1);
  74. }
  75.  
  76.  
  77. void ifNodeNull(Node* node, std::queue<Node*> &queueData, int amountOfKeys) {
  78. std::cout << "null ";
  79. queueData.pop();
  80. recursiveBFS(node, queueData, amountOfKeys);
  81. return;
  82. }
  83.  
  84.  
  85. void recursiveBFS(Node* node, std::queue<Node*> &queueData, int amountOfKeys) {
  86. queueData.empty() || amountOfKeys == 0 ? exit() : queueData.front() == nullptr ? ifNodeNull(node, queueData, amountOfKeys) : addQueue(node, queueData, amountOfKeys);
  87. }
  88.  
  89. void printTree(Node* root, int amountOfKeys) {
  90. std::queue<Node*> queueData;
  91. queueData.push(root);
  92. recursiveBFS(root, queueData, amountOfKeys);
  93. }
  94. // _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
  95.  
  96. int main(){
  97. std::vector<int> data = readFile();
  98. printTree(vectorToBST(data, 0, data.size() - 1), data.size());
  99. return 0;
  100. }
Advertisement
Add Comment
Please, Sign In to add comment