BTREE.PAS 1.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677
  1. type
  2. ptree = ^btree;
  3. btree = record
  4. key : integer;
  5. left,right : ptree;
  6. end;
  7. Procedure DoWork(tr : ptree);
  8. begin
  9. end;{DoWork}
  10. {-----------------}
  11. procedure LRootR(var tr : ptree);
  12. begin
  13. if tr <> nil then
  14. begin
  15. LrootR(tr^.left);
  16. DoWork(tr);
  17. LrootR(tr^.right);
  18. end;
  19. end;
  20. procedure RootRL(var tr : ptree);
  21. begin
  22. if tr <> nil then begin
  23. DoWork(tr);
  24. rootRL(tr^.right);
  25. rootRL(tr^.left);
  26. end;
  27. end;
  28. procedure RLroot(var tr : ptree);
  29. begin
  30. if tr <> nil then begin
  31. RLroot(tr^.right);
  32. RLroot(tr^.left);
  33. DoWork(tr);
  34. end;
  35. end;
  36. function CreateDecTree(num : byte) : ptree;
  37. var ret : ptree;
  38. begin
  39. if num = 0 then begin
  40. CreateDecTree := nil;
  41. exit;
  42. end;
  43. New(Ret);
  44. Ret^.key := num;
  45. Ret^.Left := CreateDecTree(num-1);
  46. Ret^.Right := CreateDecTree(num-1);
  47. CreateDecTree := ret;
  48. end; {CreateIncTree}
  49. function CreateIncTree(num,max : byte) : ptree;
  50. var ret : ptree;
  51. begin
  52. if num = max+1 then begin
  53. CreateIncTree := nil;
  54. exit;
  55. end;
  56. New(Ret);
  57. Ret^.key := num;
  58. Ret^.Left := CreateIncTree(num+1,max);
  59. Ret^.Right := CreateIncTree(num+1,max);
  60. CreateIncTree := ret;
  61. end; {CreateIncTree}
  62. Function Search(sk : integer; var pt : ptree): boolean;
  63. begin
  64. Search := false;
  65. if pt^.key=sk then begin
  66. search := true;
  67. exit;
  68. end;
  69. if pt^.left <> nil then Search:=Search(sk,pt^.left);
  70. if pt^.right <> nil then Search:=Search(sk,pt^.right);
  71. end;