Advertisement
Guest User

lab3

a guest
May 23rd, 2018
63
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 2.52 KB | None | 0 0
  1. {Вводим новый тип данных}
  2. type ref = ^node;
  3.      node = record
  4.      key, count: integer;
  5.      left, right: ref;
  6. end;
  7. {Печать содержимого бинарного дерева}
  8. procedure Print_Btree (w: ref; l: integer);
  9. var i : integer;
  10. begin
  11.      if (w <> Nil) then
  12.      with w^ do
  13.           begin
  14.           Print_Btree(right,l+1);
  15.           for i:= 1 to l*4 do
  16.           write(' ');
  17.           // writeln('значение = ',key,' счетчик = ', count);
  18.           writeln(key);
  19.           Print_Btree(left,l+1);
  20.           end;
  21. end;
  22.  
  23. {Построение дерева повторений}
  24. procedure Include (x: integer; var p:ref);
  25. begin
  26.      if p = Nil then
  27.      begin {Добавляем вершину}
  28.            new (p);
  29.            with p^ do
  30.            begin
  31.                 key := x;
  32.                 count := 1;
  33.                 left := Nil;
  34.                 right := Nil;
  35.            end;
  36.      end
  37.      else
  38.      begin
  39.           if x = p^.key then
  40.              {Если число есть в дереве, то увеличиваем сч?тчик}
  41.              p^.count := p^.count + 1
  42.           else
  43.               if x > p^.key then
  44.               {Добавляем в правое поддерево}
  45.               Include(x, p^.right)
  46.           else
  47.           {Добавляем в левое поддерево}
  48.           Include(x, p^.left);
  49.      end;
  50. end;
  51.  
  52. function equal(root1, root2: ref): integer;
  53. begin
  54.      if (root1 = Nil) and (root2 = Nil) then equal := 1 else
  55.      if ((root1 = Nil) and (root2 <> Nil))or((root1 <> Nil)and(root2 = Nil)) or (root1^.key <> root2^.key) then equal:=0 else
  56.      equal := equal(root1^.left, root2^.left)*equal(root1^.right,root2^.right);
  57. end;
  58.  
  59. var
  60.    root1, root2: ref;
  61.    k: integer;
  62.    
  63. begin
  64.      root1 := Nil;
  65.      //writeln('дерево повторений');
  66.      writeln('введите числа первого дерева (0 - конец ввода)');
  67.      read(k);
  68.      while k <> 0 Do
  69.      begin
  70.           Include (k,root1);
  71.           read(k);
  72.      end;
  73.      
  74.      writeln('введите числа второго дерева (0 - конец ввода)');
  75.      read(k);
  76.      while k <> 0 Do
  77.      begin
  78.           Include (k,root2);
  79.           read(k);
  80.      end;
  81.  
  82.      if equal(root1, root2) = 1 then
  83.         writeln('деревья равны')
  84.      else
  85.          writeln('деревья не равны');
  86.      //writeln('печать дерева');
  87.      //Print_Btree (root,2);
  88. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement