DilyaraL

17.8

May 16th, 2018
107
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.56 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include<iostream>
  3. #include<fstream>
  4. using namespace std;
  5. ////////////////////////
  6. struct treeNode
  7. {
  8. treeNode* left;
  9. treeNode* right;
  10. int data;
  11. };
  12. ///////////////////////
  13. struct stackNode
  14. {
  15. stackNode* next;
  16. treeNode* node;
  17. };
  18. //////////////////////
  19. void push_tree(treeNode* &tree_top, int x)
  20. {
  21. treeNode *p, *m;
  22. bool b;
  23. if (tree_top == NULL)
  24. {
  25. m = new treeNode;
  26. m->data = x;
  27. m->left = NULL;
  28. m->right = NULL;
  29. tree_top = m;//root
  30. }
  31. else
  32. {
  33. m = tree_top;
  34. b = true;
  35. while (b)
  36. {
  37. if (x >= m->data)
  38. {
  39. if (m->right)
  40. m = m->right;
  41. else
  42. {
  43. p = new treeNode;
  44. p->data = x;
  45. p->left = NULL;
  46. p->right = NULL;
  47. m->right = p;
  48. b = false;
  49. }
  50. }
  51. else
  52. {
  53. if (m->left) m = m->left;
  54. else
  55. {
  56. p = new treeNode;
  57. p->data = x;
  58. p->left = NULL;
  59. p->right = NULL;
  60. m->left = p;
  61. b = false;
  62. }
  63. }
  64. }
  65. }
  66.  
  67. }
  68. /////////////////////////////////////////////////
  69. void push_stack(stackNode* &stack_top, treeNode* t)
  70. {
  71. stackNode* p;
  72. p = new stackNode;
  73. p->node = t;
  74. p->next = stack_top;
  75. stack_top = p;
  76. }
  77. //////////////////////////////////////////////////////////////
  78. void create_tree(ifstream &f, treeNode* &tree_top)
  79. {
  80. tree_top = NULL;
  81. int x;
  82. while (f >> x)
  83. {
  84. push_tree(tree_top, x);
  85. }
  86. }
  87. /////////////////////////
  88. void pop_stack(stackNode* &stack_top, treeNode* &t)
  89. //get node of tree from stack
  90. {
  91. stackNode *p;
  92. if (stack_top)
  93. {
  94. t = stack_top->node;
  95. p = stack_top->next;
  96. delete stack_top;
  97. stack_top = p;
  98. }
  99. }
  100. /////////////////////////////////////////////////////////////
  101. void print_node(int x)
  102. {
  103. cout << " " << x;
  104. }
  105. ////////////////////////////
  106. void inorder_tree(treeNode* tree_top)//печать обход в глубину (по порядку) с левым уклоном
  107. {
  108. stackNode* stack_top;
  109. treeNode* tree_p;
  110. tree_p = tree_top;
  111. stack_top = NULL;
  112. do
  113. {
  114. while (tree_p)
  115. {
  116. while (tree_p->left)
  117. {
  118. push_stack(stack_top, tree_p);
  119. tree_p = tree_p->left;
  120. }
  121. print_node(tree_p->data);
  122. tree_p = tree_p->right;
  123. }
  124.  
  125. if (stack_top)
  126. {
  127. pop_stack(stack_top, tree_p);
  128. print_node(tree_p->data);
  129. tree_p = tree_p->right;
  130. }
  131. } while (stack_top || tree_p);
  132. cout << endl;
  133. }
  134.  
  135. void EtaskA(treeNode* &tree_top, int e, bool &f)
  136.  
  137. {
  138.  
  139. if (tree_top && !f)
  140.  
  141. {
  142.  
  143. if (tree_top->data == e)
  144.  
  145. {
  146.  
  147. f = true;
  148.  
  149. }
  150.  
  151. else
  152.  
  153. {
  154.  
  155. EtaskA(tree_top->left, e, f);
  156.  
  157. EtaskA(tree_top->right, e, f);
  158.  
  159. }
  160.  
  161. }
  162.  
  163. }
  164.  
  165. void EtaskB(treeNode* &tree_top, int e, int&k)
  166.  
  167. {
  168.  
  169. if (tree_top)
  170.  
  171. {
  172.  
  173. if (tree_top->data == e)
  174.  
  175. k++;
  176.  
  177. EtaskB(tree_top->left, e, k);
  178.  
  179. EtaskB(tree_top->right, e, k);
  180.  
  181. }
  182.  
  183. }
  184.  
  185. void EtaskC(treeNode* &tree_top, int&s)
  186.  
  187. {
  188.  
  189. if (tree_top)
  190.  
  191. {
  192.  
  193. s += tree_top->data;
  194.  
  195. EtaskC(tree_top->left, s);
  196.  
  197. EtaskC(tree_top->right, s);
  198.  
  199. }
  200.  
  201. }
  202.  
  203. void EtaskD(treeNode* &tree_top, int&max)
  204.  
  205. {
  206.  
  207. if (tree_top)
  208.  
  209. {
  210.  
  211. if (tree_top->data>max)
  212.  
  213. max = tree_top->data;
  214.  
  215. EtaskD(tree_top->left, max);
  216.  
  217. EtaskD(tree_top->right, max);
  218.  
  219. }
  220.  
  221. }
  222.  
  223. void EtaskE(treeNode* &tree_top)
  224.  
  225. {
  226.  
  227. if (tree_top)
  228.  
  229. {
  230.  
  231. if (!tree_top->left && !tree_top->right)
  232.  
  233. {
  234. cout << tree_top->data << ' ';
  235.  
  236. }
  237. else
  238. {
  239. EtaskE(tree_top->left);
  240. EtaskE(tree_top->right);
  241. }
  242. }
  243.  
  244. }
  245.  
  246. void EtaskF(treeNode* &tree_top, int &k, int &max, int&temp)
  247.  
  248. {
  249.  
  250. if (tree_top)
  251.  
  252. {
  253.  
  254. if (!tree_top->left && !tree_top->right)
  255.  
  256. {
  257. if (k > max)
  258. max = k;
  259. k = temp;
  260. }
  261. else
  262. {
  263. if (tree_top->left && tree_top->right)
  264. {
  265. temp = k;
  266. }
  267. k++;
  268. EtaskF(tree_top->left,k,max,temp);
  269. EtaskF(tree_top->right,k,max,temp);
  270. }
  271. }
  272.  
  273. }
  274.  
  275. int main()
  276. {
  277. ifstream f("Text.txt");
  278. int x;
  279. treeNode* tree_top;
  280. create_tree(f, tree_top);
  281. f.close();
  282. inorder_tree(tree_top);
  283.  
  284. /*bool t = false;
  285. if (tree_top)
  286. {
  287. EtaskA(tree_top, 11, t);
  288. if (t)
  289. cout << "Yes" << endl;
  290. else
  291. cout << "No" << endl;
  292. }
  293. else
  294. cout << "Tree is empy" << endl;*/
  295.  
  296. /*int k = 0;
  297. if (tree_top)
  298. {
  299. EtaskB(tree_top, 19,k);
  300. cout << k << endl;
  301. }
  302. else
  303. cout << "Tree is empy" << endl; */
  304.  
  305. /*int s = 0;
  306. EtaskC(tree_top, s);
  307. cout << s << endl;*/
  308.  
  309. /*int max = tree_top->data;
  310. EtaskD(tree_top, max);
  311. cout << max << endl;*/
  312.  
  313. /*if (tree_top)
  314. EtaskE(tree_top);
  315. else
  316. cout << "Tree is empy" << endl;*/
  317. int max = 0, k = 0, temp = 0;
  318. EtaskF(tree_top, k, max, temp);
  319. cout << max << endl;
  320. system("pause");
  321. return 0;
  322. }
Advertisement
Add Comment
Please, Sign In to add comment