Advertisement
Guest User

Untitled

a guest
Jun 26th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.06 KB | None | 0 0
  1. #define _CRT_SECURE_NO_WARNINGS
  2. #include <stdio.h>
  3. #include <stdlib.h>
  4. #include <queue>
  5. using namespace std;
  6. struct btree
  7. {
  8. char elem;
  9. btree * left, *right;
  10. };
  11. btree * build_tree(FILE * in) {
  12. char sym;
  13. btree *d;
  14. fscanf(in,"%c", &sym);
  15. switch (sym) {
  16. case '(':
  17. { d = new btree;
  18. fscanf(in,"%c", &sym);
  19. d->elem = sym;
  20. d->left = build_tree(in);
  21. d->right = build_tree(in);
  22. fscanf(in,"%c", &sym);
  23. return d;
  24. }
  25. case '0':
  26. return NULL;
  27. case ',':
  28. d = build_tree(in);
  29. return d;
  30. default:
  31. return build_tree(in);
  32. }
  33. }
  34. void del_el(btree * t)
  35. {
  36. if (t->left) {
  37. del_el(t->left);
  38. delete t->left;
  39. }
  40. if (t->right)
  41. {
  42. del_el(t->right);
  43. delete t->right;
  44. }
  45.  
  46. }
  47. void printt(btree * f)
  48. {
  49. btree * d = f;
  50. queue<btree*> Q;
  51. if (d != NULL)
  52. {
  53. Q.push(d);
  54. do
  55. {
  56. d = Q.front();
  57. printf("%c\n", d->elem);
  58. if (d->left != NULL)
  59. Q.push(d->left);
  60. if (d->right != NULL)
  61. Q.push(d->right);
  62. Q.pop();
  63. } while (!Q.empty());
  64. }
  65. }
  66.  
  67. int find_print(btree * f, char E)
  68. {
  69. if (f->elem == E)
  70. return 2;
  71. btree * d = f;
  72. int mark = 0;
  73. int answer = 0;
  74. queue<btree*> Q;
  75. if (d != NULL)
  76. { Q.push(d);
  77. do
  78. {
  79. d = Q.front();
  80. if (d->left)
  81. if (d->left->elem == E)
  82. {
  83. mark = -1;
  84. answer = 1;
  85. }
  86. else
  87. Q.push(d->left);
  88. if (d->right)
  89. if (d->right->elem == E)
  90. {
  91. mark = 1;
  92. answer = 1;
  93. }
  94. else
  95. Q.push(d->right);
  96. Q.pop();
  97. } while (!Q.empty()&&!answer);
  98. if (mark == 1)
  99. {
  100. del_el(d->right);
  101. delete d->right;
  102. d->right = NULL;
  103. }
  104. if (mark = -1)
  105. {
  106. del_el(d->left);
  107. delete d->left;
  108. d->left = NULL;
  109. }
  110. }
  111. return answer;
  112. }
  113. int main()
  114. {
  115. FILE * in = fopen("input.txt", "r");
  116. btree * T = build_tree(in);
  117. system("pause");
  118. system("cls");
  119. char E;
  120. printf("ENTER ELEM\n");
  121. scanf("%c", &E);
  122. printt(T);
  123. int answer = find_print(T,E);
  124. if (answer == 2)
  125. {
  126. del_el(T);
  127. delete T;
  128. T = NULL;
  129. }
  130. printt(T);
  131. system("pause");
  132. fclose(in);
  133. return 404;
  134. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement