Advertisement
Guest User

Untitled

a guest
Jul 20th, 2017
61
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 4.62 KB | None | 0 0
  1. unit UBVS;
  2.  
  3. interface
  4.  
  5. TYPE
  6.   TKLIC = INTEGER;
  7.  
  8.   TUK = ^TUZEL;
  9.  
  10.   TUZEL = RECORD
  11.             klic : TKLIC;
  12.             llink, rlink : TUK
  13.           END;
  14.          
  15.   cDvs = object
  16.             public
  17.               koren : TUK;
  18.             public
  19.            
  20.               function ziskejKoren : TUK;
  21.               { metody}
  22.               constructor init;
  23.               procedure preorder(u : TUK);
  24.               procedure inorder(u : TUK);
  25.               procedure postorder(u : TUK);
  26.               {function hledej_Rek(u : TUK; h : TKLIC) : TUK;}
  27.               function hledej_Nerek(u : TUK; h : TKLIC) : TUK;
  28.               procedure pridejList_Rek(var u : TUK; h : TKLIC);
  29.               procedure pridejList_Nerek(var u : TUK; h : TKLIC);
  30.               procedure odeberUzel(var u : TUK; h : TKLIC);
  31.               procedure zrusStrom(var u : TUK);
  32.               procedure vypisStrom(u : TUK);
  33.              
  34.           end;      
  35.  
  36.        
  37. implementation
  38. uses crt;
  39.  
  40. { ------------ METODY Z TEORIE --------------------------------------------}
  41.  
  42. constructor cDvs.init;
  43.  
  44. begin
  45.   self.koren := nil;
  46. end;
  47.  
  48. procedure cDvs.preorder(u : TUK);
  49.  
  50.   begin
  51.     if u <> nil then begin
  52.       writeln(u^.klic);
  53.       preorder(u^.llink);
  54.       preorder(u^.rlink);
  55.     end;
  56.   end;
  57.  
  58. procedure cDvs.inorder(u : TUK);
  59.  
  60.   begin
  61.     if u <> nil then begin
  62.       inorder(u^.llink);
  63.       writeln(u^.klic);
  64.       inorder(u^.rlink);
  65.     end;
  66.   end;
  67.  
  68. procedure cDvs.postorder(u : TUK);
  69.  
  70.   begin
  71.     if u <> nil then begin
  72.       postorder(u^.llink);
  73.       postorder(u^.rlink);
  74.       writeln(u^.klic);
  75.     end;
  76.   end;
  77.  
  78. function cDvs.hledej_Nerek(u : TUK; h : TKLIC) : TUK;
  79.  
  80.   begin
  81.  
  82.     while (u <> nil) and (u^.klic <> h) do begin
  83.    
  84.       if h < u^.klic then
  85.         u := u^.llink
  86.       else
  87.         u := u^.rlink;
  88.     end;
  89.    
  90.     hledej_Nerek := u;
  91.  
  92.   end;
  93.  
  94. procedure cDvs.pridejList_Rek(var u : TUK; h : TKLIC);
  95.  
  96.   begin
  97.  
  98.     if u = nil then begin
  99.       new(u);
  100.       u^.klic := h;
  101.       u^.llink := nil;
  102.       u^.rlink := nil;
  103.     end
  104.     else {<,>,=}
  105.       if h < u^.klic then
  106.         pridejList_Rek(u^.llink, h)
  107.       else {>,=}
  108.         if h > u^.klic then
  109.           pridejList_Rek(u^.rlink, h)
  110.         else {=}
  111.           writeln('Uzel se stejnym klicem uz ve stromu je. operace pridani neprovedena.');
  112.   end;
  113.  
  114. procedure cDvs.odeberUzel(var u : TUK; h : TKLIC);
  115.  
  116.   var odeber, predodeber : TUK;
  117.  
  118.   begin
  119.  
  120.     if u = nil then
  121.       { h nenalezi bvs}
  122.     else { <,>,= }
  123.       if h < u^.klic then
  124.         odeberUzel(u^.llink, h)
  125.       else
  126.         if h > u^.klic then
  127.           odeberUzel(u^.rlink, h)
  128.         else begin { = }
  129.           odeber := u;
  130.           if u^.llink = nil then
  131.             u := u^.rlink
  132.           else
  133.             if u^.rlink = nil then
  134.               u := u^.llink
  135.             else begin {L,R}
  136.               predodeber := nil;
  137.               odeber := u^.llink;
  138.               while odeber <> nil do begin
  139.                 predodeber := odeber;
  140.                 odeber := odeber^.rlink;
  141.               end;
  142.               u^.klic := odeber^.klic;
  143.               if predodeber = nil then
  144.                 u^.llink:= odeber^.llink
  145.               else
  146.                 predodeber^.rlink := odeber^.llink
  147.             end;
  148.         end;
  149.  
  150.   end;
  151.  
  152. {-------------- KONEC METOD Z TEORIE ---------------------------------------}
  153.  
  154. function cDvs.ziskejKoren : TUK;
  155.  
  156. begin
  157.   ziskejKoren := koren;
  158. end;
  159.  
  160. procedure cDvs.zrusStrom(var u : TUK);
  161.  
  162.   {var}
  163.  
  164.   begin    
  165.      if u <> nil then begin
  166.       zrusStrom(u^.llink);
  167.       zrusStrom(u^.rlink);
  168.       dispose(u);
  169.     end;
  170.   end;
  171.  
  172. {function cDvs.hledej_Rek(u : TUK; h : TKLIC) : TUK;
  173.  
  174.   begin
  175.  
  176.     if (u <> NIL) and (u^.klic <> h) then begin
  177.    
  178.       if h < u^.klic then
  179.         u := hledej_Rek(u^.llink, h)
  180.       else
  181.         u := hledej_Rek(u^.rlink, h);
  182.    
  183.     end;
  184.    
  185.     hledej_Rek := u;
  186.  
  187.   end; }
  188.  
  189. procedure cDvs.pridejList_Nerek(var u : TUK; h : TKLIC);
  190.  
  191.   begin
  192.  
  193.   while u <> nil do begin
  194.  
  195.       if h < u^.klic then
  196.         u := u^.llink
  197.       else if h > u^.klic then
  198.           u := u^.rlink
  199.           else writeln('uzel se stejnym klicem uz ve stromu je. operace pridani nebyla provedena');
  200.  
  201.   end;
  202.     if u = nil then begin
  203.       new(u);
  204.       u^.klic := h;
  205.       u^.llink := nil;
  206.       u^.rlink := nil;
  207.     end;
  208.            
  209.   end;
  210.  
  211.  
  212. procedure cDvs.vypisStrom(u : TUK);
  213.  
  214. begin
  215.  
  216.   if u<>nil then begin
  217.  
  218.     writeln(u^.klic);
  219.     vypisStrom(u^.llink);
  220.     vypisStrom(u^.rlink);
  221.    
  222.   end;
  223.  
  224. end;
  225.  
  226.  
  227. begin
  228.  
  229.  
  230.  
  231. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement