home *** CD-ROM | disk | FTP | other *** search
/ C!T ROM 2 / ctrom_ii_b.zip / ctrom_ii_b / PROGRAM / PASCAL / PASTUT34 / BINTREE.PAS < prev    next >
Pascal/Delphi Source File  |  1993-06-03  |  2KB  |  99 lines

  1. program binary_tree;
  2.  
  3. {~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~}
  4. { Program to show how a binary tree can be used to order a set of integers }
  5. {                                                                          }
  6. { BINTREE.PAS  ->  BINTREE.EXE    R Shaw     5.8.92                        }
  7. {__________________________________________________________________________}
  8.  
  9. uses Crt;
  10.  
  11. type
  12.    PNode = ^TNode;
  13.    Tnode  = record
  14.        left    : PNode;
  15.        number  : integer;
  16.        right   : PNode;
  17.    end;
  18.  
  19. var
  20.    Num           : integer;
  21.    Parent,Child  : PNode;
  22.    FirstNode,l,r : PNode;
  23.    reply         : char;
  24.  
  25. procedure init;
  26. begin
  27.    FirstNode := Nil;
  28.    Parent := Nil;
  29.    Child := Nil;
  30. end;
  31.  
  32. procedure NextNode(Node:PNode);
  33.  
  34. procedure CreateNode(n: integer);
  35. begin
  36.    New(Child);
  37.    Child^.number := n;
  38.    Child^.left   := Nil;
  39.    Child^.right  := Nil;
  40. end;
  41.  
  42. begin
  43.   if FirstNode = Nil then begin
  44.                              CreateNode(num);
  45.                              FirstNode := Child;
  46.                              exit;
  47.                           end;
  48.   if Node^.number > Num
  49.      then if Node^.left = Nil
  50.              then begin
  51.                      CreateNode(num);
  52.                      Node^.left := Child;
  53.                   end
  54.              else begin
  55.                      Node := Node^.left;
  56.                      NextNode(Node);
  57.                   end
  58.      else if Node^.right = Nil
  59.              then begin
  60.                      CreateNode(num);
  61.                      Node^.right := Child;
  62.                   end
  63.              else begin
  64.                      Node := Node^.right;
  65.                      NextNode(Node);
  66.                   end;
  67. end;
  68.  
  69. procedure Tree(Node: PNode);
  70. begin
  71.    l := Node^.left;
  72.    If l <> Nil then Tree(l);
  73.    if Node^.number <> -1 then writeln(Node^.number);
  74.    r := Node^.right;
  75.    If r <> Nil then Tree(r);
  76. end;
  77.  
  78.  
  79. {Main}
  80.  
  81. begin
  82.    ClrScr;
  83.    Init;
  84.    repeat
  85.      Write('Please enter a number in range 0 to 30000 or -1 to conclude ');
  86.      readln(num);
  87.      NextNode(FirstNode);
  88.    until num = -1;
  89.    writeln;
  90.    write('Do you wish for an ordered list of the data (Y/N) ? ');
  91.    readln(reply);
  92.    writeln;
  93.    If UpCase(reply) = 'Y' then Tree(FirstNode);
  94.    writeln;
  95.    write('Press any key to continue: ');
  96.    repeat until keypressed;
  97. end.
  98.  
  99.