Advertisement
Guest User

Untitled

a guest
Nov 18th, 2018
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.79 KB | None | 0 0
  1. #include <iostream>
  2. #include <stdio.h>
  3. #include <cstdint>
  4. std::uintptr_t i;
  5. using namespace std;
  6.  
  7. struct Node {
  8. int data;
  9. Node* left;
  10. Node* right;
  11. Node* parent;
  12. Node*v, *cur;
  13.  
  14. };
  15. Node* root = 0;
  16. Node* getfreeNode(int value, Node *parent) {// построение нового узла
  17. Node *tmp = new Node;
  18. tmp->left = tmp->right = NULL;
  19. tmp->data = value;
  20. tmp->parent = parent;
  21. return tmp;
  22.  
  23. }
  24. Node create(Node *root, int key)
  25. {
  26. // Выделение памяти под корень дерева
  27. Node *tmp = new Node;
  28. // Присваивание значения ключу
  29. tmp->data = key;
  30. // Присваивание указателю на родителя значения NULL
  31. tmp->parent = NULL;
  32. // Присваивание указателю на левое и правое поддерево значения NULL
  33. tmp->left = tmp->right = NULL;
  34. root = tmp;
  35. return *root;
  36. }
  37. void insert(Node **root, int value) {
  38. Node *tmp = NULL;
  39. if (*root == NULL) {
  40. *root = getfreeNode(value, NULL);
  41. return;
  42. }
  43. tmp = *root;
  44. while (tmp) {
  45. if (value > tmp->data) {
  46. if (tmp->right) {
  47. tmp = tmp->right;
  48. continue;
  49.  
  50. }
  51. else {
  52. tmp->right = getfreeNode(value, tmp);
  53. return;
  54. }
  55. }
  56. else if (value < tmp->data) {
  57. if (tmp->left) {
  58. tmp = tmp->left;
  59. continue;
  60. }
  61. else {
  62. tmp->left = getfreeNode(value, tmp);
  63. return;
  64. }
  65. }
  66. else {
  67. return;
  68. }
  69. }
  70. }
  71. void find1(Node **root, int d) {
  72. Node *cur = new Node;
  73. cur = *root;
  74. Node *v = new Node;
  75. v = NULL;
  76. while (cur != NULL) {
  77. if (cur->data > d) {
  78. v = cur;
  79. cur = cur->left;
  80. }
  81. else
  82. cur = cur->right;
  83. }
  84. cout << "Следующий элемент за данным: " << v->data << endl;
  85. }
  86.  
  87. void find2(Node **root, int d) {
  88. Node *cur = new Node;
  89. Node *v = new Node;
  90. cur = *root;
  91. v = NULL;
  92. while (cur != NULL) {
  93. if (cur->data < d) {
  94. v = cur;
  95. cur = cur->right;
  96. }
  97. else
  98. cur = cur->left;
  99. }
  100. cout << "Предыдущий элемент: " << v->data << endl;
  101.  
  102. }
  103.  
  104.  
  105. void Vyvod(Node **w, int l) {
  106. int i;
  107. if (*w != NULL) {
  108. Vyvod(&((**w).right), l + 1);
  109. for (i = 1; i <= l; i++) cout << " ";
  110. cout << (**w).data << endl;
  111. Vyvod(&((**w).left), l + 1);
  112. }
  113. }
  114.  
  115.  
  116.  
  117. int main() {
  118. setlocale(LC_ALL, "Russian");
  119. int mas[] = {10, 3, 4, 8, 9, 11, 1, 12, 13, 14, 15, 16, 2, 5, 7, 6 };
  120. for (int i = 0; i < 16; i++)
  121. insert(&root, mas[i]); // заполнение корня числами
  122. create(root, 10); // создание корня дерева
  123. Vyvod(&root, 1); // вывод всего дерева
  124. int n;
  125. cout << "Введите элемент из дерева" << endl;
  126. cin >> n;
  127. find1(&root,n); // поиск соседей
  128. find2(&root, n);
  129. system("pause");
  130. return 0;
  131.  
  132. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement