Advertisement
Guest User

Untitled

a guest
May 4th, 2016
83
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.27 KB | None | 0 0
  1. #include "stdafx.h"
  2. #include <iostream>
  3.  
  4. using namespace std;
  5.  
  6. short int elements;
  7.  
  8. struct Node
  9. {
  10. char name[20];
  11. int short cost, count;
  12. Node *left, *right;
  13. };
  14.  
  15. void AddToTree(char name[], int cost, int count, Node *MyTree)
  16. {
  17. if(strncmp(name, MyTree->name, 1) < 0)
  18. {
  19. if (MyTree->left != NULL)
  20. AddToTree(name, cost, count, MyTree->left);
  21. else
  22. {
  23. MyTree->left = new Node;
  24. MyTree->left->left = MyTree->left->right = NULL;
  25. strcpy(MyTree->left->name, name);
  26. MyTree->left->cost = cost;
  27. MyTree->left->count = count;
  28. }
  29. }
  30. else
  31. {
  32. if (MyTree->right != NULL)
  33. AddToTree(name, cost, count, MyTree->right);
  34. else
  35. {
  36. MyTree->right = new Node;
  37. MyTree->right->left = MyTree->right->right=NULL;
  38. strcpy(MyTree->right->name, name);
  39. MyTree->right->cost = cost;
  40. MyTree->right->count = count;
  41. }
  42. }
  43. }
  44.  
  45. void PrintTree(Node *Tree, bool method)
  46. {
  47. if(NULL == Tree)
  48. return;
  49. switch(method)
  50. {
  51. case false:
  52. {
  53. printf("%s\t\t\t%d\t%d\n", Tree->name, Tree->cost, Tree->count);
  54. PrintTree(Tree->left, false);
  55. PrintTree(Tree->right, false);
  56. break;
  57. }
  58. case true:
  59. {
  60. PrintTree(Tree->left, true);
  61. PrintTree(Tree->right, true);
  62. printf("%s\t\t\t%d\t%d\n", Tree->name, Tree->cost, Tree->count);
  63. break;
  64. }
  65. }
  66. }
  67.  
  68. void PrintLeafs(Node *Tree)
  69. {
  70. if(Tree)
  71. {
  72. PrintLeafs(Tree->left);
  73. if (!Tree->left && !Tree->right)
  74. printf("%s\t\t\t%d\t%d\n", Tree->name, Tree->cost, Tree->count);
  75. PrintLeafs(Tree->right);
  76. }
  77. }
  78.  
  79. Node *p;
  80.  
  81. void SearchMaxCountOfComponents(Node *Tree, int max)
  82. {
  83. if(NULL == Tree)
  84. return;
  85. if(Tree->count > max)
  86. {
  87. max = Tree->count;
  88. p = Tree;
  89. }
  90. SearchMaxCountOfComponents(Tree->left, max);
  91. SearchMaxCountOfComponents(Tree->right, max);
  92. }
  93.  
  94. void main()
  95. {
  96. Node *MyTree = NULL;
  97. int n;
  98. {
  99. setlocale(LC_ALL, "Russian");
  100. do
  101. {
  102. cout << "\n1. Добавить новый елемент";
  103. cout << "\n2. Вывести дерево (прямой обход)";
  104. cout << "\n3. Вывести дерево (обратный обход)";
  105. cout << "\n4. Вывести листья";
  106. cout << "\n5. Вычислить количество ветвей";
  107. cout << "\n6. Вывести блок с найбольшим числом узлов";
  108. cout << "\n7. Выход из программы\n\n";
  109. cin >> n;
  110. switch(n)
  111. {
  112. case 1:
  113. {
  114. char name[20];
  115. int cost, count;
  116. cin.get();
  117. cout << "\tЕлемент № " << ++elements << endl;
  118. cout << "\nВведите наименование блока: ";
  119. cin.getline(name, 20);
  120. cout << "\nВведите цену: ";
  121. cin >> cost;
  122. cout << "\nВведите количество узлов: ";
  123. cin >> count;
  124. if(MyTree == NULL)
  125. {
  126. MyTree = new Node;
  127. strcpy(MyTree->name, name);
  128. MyTree->cost = cost;
  129. MyTree->count = count;
  130. MyTree->left = MyTree->right = NULL;
  131. }
  132. else
  133. AddToTree(name, cost, count, MyTree);
  134. break;
  135. }
  136. case 2:
  137. {
  138. cout << "\n\tДерево (прямой вывод):\n";
  139. cout << "Наименование блока\tЦена\tКоличество\n";
  140. PrintTree(MyTree, false);
  141. break;
  142. }
  143. case 3:
  144. {
  145. cout << "\n\tДерево: (обратный вывод)\n";
  146. cout << "Наименование блока\tЦена\tКоличество\n";
  147. PrintTree(MyTree, true);
  148. break;
  149. }
  150. case 4:
  151. {
  152. cout << "\n\tЛистья:\n";
  153. cout << "Наименование блока\tЦена\tКоличество\n";
  154. PrintLeafs(MyTree);
  155. break;
  156. }
  157. case 5:
  158. {
  159. printf("\nКоличество веток: %d\n", elements-1);
  160. break;
  161. }
  162. case 6:
  163. {
  164. p = MyTree;
  165. int MaxComponents = MyTree->count;
  166. cout << "\n\tБлок с найбольшим числом узлов:\n";
  167. SearchMaxCountOfComponents(MyTree, MaxComponents);
  168. cout << "Наименование блока\tЦена\tКоличество\n";
  169. printf("%s\t\t\t%d\t%d\n", p->name, p->cost, p->count);
  170. break;
  171. }
  172. }
  173. }
  174. while(n != 7);
  175. setlocale(LC_ALL, "OSP");
  176. }
  177. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement