DilyaraL

17.7

May 9th, 2018
124
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.55 KB | None | 0 0
  1. #include<iostream>
  2. #include<fstream>
  3. using namespace std;
  4. ////////////////////////
  5. struct treeNode
  6. {
  7. treeNode* left;
  8. treeNode* right;
  9. int data;
  10. };
  11. ///////////////////////
  12. struct stackNode
  13. {
  14. stackNode* next;
  15. treeNode* node;
  16. };
  17. //////////////////////
  18. void push_tree(treeNode* &tree_top, int x)
  19. {
  20. treeNode *p, *m;
  21. bool b;
  22. if (tree_top == NULL)
  23. {
  24. m = new treeNode;
  25. m->data = x;
  26. m->left = NULL;
  27. m->right = NULL;
  28. tree_top = m;//root
  29. }
  30. else
  31. {
  32. m = tree_top;
  33. b = true;
  34. while (b)
  35. {
  36. if (x >= m->data)
  37. {
  38. if (m->right)
  39. m = m->right;
  40. else
  41. {
  42. p = new treeNode;
  43. p->data = x;
  44. p->left = NULL;
  45. p->right = NULL;
  46. m->right = p;
  47. b = false;
  48. }
  49. }
  50. else
  51. {
  52. if (m->left) m = m->left;
  53. else
  54. {
  55. p = new treeNode;
  56. p->data = x;
  57. p->left = NULL;
  58. p->right = NULL;
  59. m->left = p;
  60. b = false;
  61. }
  62. }
  63. }
  64. }
  65.  
  66. }
  67. /////////////////////////////////////////////////
  68. void push_stack(stackNode* &stack_top, treeNode* t)
  69. {
  70. stackNode* p;
  71. p = new stackNode;
  72. p->node = t;
  73. p->next = stack_top;
  74. stack_top = p;
  75. }
  76. //////////////////////////////////////////////////////////////
  77. void create_tree(ifstream &f, treeNode* &tree_top)
  78. {
  79. tree_top = NULL;
  80. int x;
  81. while (f >> x)
  82. {
  83. push_tree(tree_top, x);
  84. }
  85. }
  86. /////////////////////////
  87. void pop_stack(stackNode* &stack_top, treeNode* &t)
  88. //get node of tree from stack
  89. {
  90. stackNode *p;
  91. if (stack_top)
  92. {
  93. t = stack_top->node;
  94. p = stack_top->next;
  95. delete stack_top;
  96. stack_top = p;
  97. }
  98. }
  99. /////////////////////////////////////////////////////////////
  100. void print_node(int x)
  101. {
  102. cout << " " << x;
  103. }
  104. ////////////////////////////
  105. void inorder_tree(treeNode* tree_top)//печать обход в глубину (по порядку) с левым уклоном
  106. {
  107. stackNode* stack_top;
  108. treeNode* tree_p;
  109. tree_p = tree_top;
  110. stack_top = NULL;
  111. do
  112. {
  113. while (tree_p)
  114. {
  115. while (tree_p->left)
  116. {
  117. push_stack(stack_top, tree_p);
  118. tree_p = tree_p->left;
  119. }
  120. print_node(tree_p->data);
  121. tree_p = tree_p->right;
  122. }
  123.  
  124. if (stack_top)
  125. {
  126. pop_stack(stack_top, tree_p);
  127. print_node(tree_p->data);
  128. tree_p = tree_p->right;
  129. }
  130. } while (stack_top || tree_p);
  131. cout << endl;
  132. }
  133. //////////////////////////////////////
  134. void taskA(treeNode* tree_top)
  135. {
  136. treeNode* tree_p;
  137. tree_p = tree_top;
  138. while (tree_p->left)
  139. tree_p = tree_p->left;
  140. cout << tree_p->data << endl;
  141. }
  142.  
  143. void taskB(treeNode* tree_top, int e)
  144. {
  145. treeNode* tree_p;
  146. tree_p = tree_top;
  147. int k = 0;
  148. while (tree_p)
  149. {
  150. if (tree_p->data > e)
  151. tree_p = tree_p->left;
  152. else
  153. if (tree_p->data < e)
  154. tree_p = tree_p->right;
  155. else
  156. {
  157. k++;
  158. tree_p = tree_p->right;
  159. }
  160. }
  161. cout <<'k'<< k << endl;
  162. }
  163.  
  164. double taskC(treeNode* &tree_top, treeNode*&temp, treeNode*&temptemp, double &s, int &k)
  165. {
  166. if (tree_top)
  167. {
  168. k++;
  169. s += tree_top->data;
  170. if (tree_top->right&&temp!=temptemp)
  171. {
  172. temptemp = temp;
  173. temp = tree_top;
  174. }
  175. taskC(tree_top->left,temp,temptemp, s, k);
  176. }
  177. else
  178. taskC(temp->right, temp,temptemp, s, k);//зацикливается возвращается к одному и тому же temp
  179. return s / k;
  180. }
  181.  
  182. void main()
  183. {
  184. ifstream f("arb.txt");
  185. int x;
  186. treeNode* tree_top;
  187. create_tree(f, tree_top);
  188. f.close();
  189. //taskA(tree_top);
  190.  
  191. /*int e;
  192. cin >> e;
  193. taskB(tree_top, e);*/
  194.  
  195. double s = 0; int k = 0;
  196. cout << taskC(tree_top, tree_top,tree_top, s, k) << endl;;
  197. system("pause");
  198. }
Advertisement
Add Comment
Please, Sign In to add comment