PO2PR.PAS 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. const
  2. znak = ['/','*','-','+'];
  3. type PTree = ^Tree;
  4. Tree = record
  5. left,rigth : PTree;
  6. key : char;
  7. end;
  8. var
  9. Tr : PTree;
  10. p : pointer;
  11. Procedure BuildTree(T : PTree; s : string; var n : integer);
  12. begin
  13. t^.key:=s[n];
  14. if (s[n] in znak) then
  15. begin
  16. if not(t^.key in znak) then Write('Error');
  17. new(t^.rigth);
  18. dec(n);
  19. BuildTree(t^.rigth,s,n);
  20. if t^.key <> '-' then
  21. begin
  22. dec(n);
  23. if not(t^.key in znak) then Write('Error');
  24. new(t^.left);
  25. BuildTree(t^.left,s,n);
  26. end
  27. else t^.left:=nil;
  28. end
  29. else
  30. begin
  31. t^.left:=nil; t^.rigth:=nil;
  32. end;
  33. end;
  34. Procedure post2pref(var s1 : string; var n : integer; T : PTree);
  35. begin
  36. if T <> nil then
  37. begin
  38. inc(n);
  39. post2pref(s1,n,t^.rigth);
  40. inc(n);
  41. post2pref(s1,n,t^.left);
  42. s1:=s1+t^.key;
  43. end;
  44. end;
  45. Procedure OutPut(out,s : string);
  46. var
  47. f : text;
  48. i : integer;
  49. begin
  50. assign(f,out); append(f);
  51. WriteLn(f);
  52. Write(f,'Preorder: ');
  53. for i:=length(s) downto 1 do Write(f,s[i]);
  54. close(f);
  55. end;
  56. Procedure ReadFile(inp,out : string);
  57. var
  58. f,f1 : text;
  59. s,s1 : string;
  60. x : integer;
  61. begin
  62. assign(f,inp); reset(f);
  63. assign(f1,out); rewrite(f1);
  64. ReadLn(f,s);
  65. WriteLn(f1,'Postorder: ',s);
  66. x:=length(s);
  67. BuildTree(Tr,s,x);
  68. x:=1;
  69. s1:='';
  70. WriteLn;
  71. Post2pref(s1,x,Tr);
  72. { if length(s1) <> length(s) then s1:='*******';}
  73. close(f1);
  74. Output('output.txt',s1);
  75. close(f);
  76. end;
  77. begin
  78. mark(p);
  79. new(Tr);
  80. tr^.left:=nil; tr^.rigth:=nil;
  81. ReadFile('input.txt','output.txt');
  82. release(p);
  83. end.