fork(15) download
  1. // Для заданной последовательности чисел, записанных в строку через пробел во входной текстовый файл
  2. // создать бинарное дерево поиска (реализация на основе массива). Запросить число с клавиатуры и воспользовавшись свойствами
  3. // бинарного дерева поиска ответить на вопрос: есть ли заданное число в последовательности.
  4. // В случае положительного ответа - удалить этот элемент из дерева. Провести прямой, обратный и внутренний обход дерева.
  5. // Массив содержит n элементов, корень - 0-ой элемент, у каждой i-ой вершины есть два потомка: (2i+1)-ая и (2i+2)-ая вершины.
  6.  
  7.  
  8. const
  9. size = 20; // Размер
  10. chislo = -1;
  11.  
  12. type
  13. A = array [0..size] of Integer; // Массив элементов
  14.  
  15. var
  16. Tree: A;
  17. treeLength, N, i: integer; // Длина массива
  18.  
  19. procedure PrintDown(y: integer; Tree: A); // Прямой обход - checked
  20. begin
  21. if (y <= treeLength) then
  22. if (Tree[y] <> 0) then
  23. begin
  24. writeln(Tree[y]);
  25. PrintDown(2*y+1, Tree);
  26. PrintDown(2*y+2, Tree);
  27. end;
  28. end;
  29.  
  30. procedure PrintLex(treeLength: integer; Tree: A); // Обратный
  31. var i : integer;
  32. begin
  33. if (i < treeLength) then
  34. begin
  35. PrintLex((i+1)*2-1, Tree);
  36. writeln(Tree[i]);
  37. PrintLex((i+1)*(2+1)-1, Tree);
  38. end;
  39. end;
  40.  
  41. procedure PrintUp(treeLength: integer; Tree: A); // Внутренний
  42. var i : integer;
  43. begin
  44. if (i < treeLength) then
  45. begin
  46. PrintUp((i+1)*2-1, Tree);
  47. PrintUp((i+1)*(2+1)-1, Tree);
  48. writeln(Tree[i]);
  49. end;
  50. end;
  51.  
  52.  
  53. procedure Find(N: integer; Tree: A); // Поиск
  54. var z, l, r : integer;
  55. begin
  56. for z := 0 to treeLength do
  57. if Tree[z] = N then begin
  58. l := 2 * z + 1;
  59. r := 2 * z + 2;
  60. if (Tree[l] <> 0) or (Tree[r] <> 0) then begin // Если у удаляемого элемента есть сын, то на место удаляемого элемента ставим его левого сына,
  61. Tree[z] := l; // на место сына ставим -1 для сохранения структуры
  62. Tree[l] := chislo;
  63. end
  64. else
  65. Tree[z] := chislo; // Если нет сыновей
  66. end;
  67. end;
  68.  
  69.  
  70. begin
  71. read(treeLength);
  72. for i:=0 to treeLength do
  73. Read(Tree[i]);
  74. readln(N);
  75. Find(N, Tree);
  76. writeln('----');
  77. PrintDown(0, Tree);
  78. end.
Success #stdin #stdout 0s 232KB
stdin
Standard input is empty
stdout
----