Rabu, 30 November 2011

Program Binary_Tree

Program Binary_Tree;
Uses crt;
Type
 Ptr    = ^Pohon ;
 Pohon  = Record
             Isi        : byte;
             Left,Right : ptr;
          End;
Var
 Root,Now : ptr;
 x,y,cari : byte;

Procedure Push(var Tree:ptr; data,level:byte);
Var now : ptr;
 Begin
  If tree = nil then
   Begin
    New(Now);
    Now^.isi   := data;
    Now^.left  := nil;
    Now^.right := nil;
    Tree := Now;
   End else
  If data < Tree^.isi then
   Push (Tree^.left,data,level)
  else
  If data >=Tree^.isi then
   Push (Tree^.right, data,level)
 End;

Procedure Input(var Tree:ptr; Nilai, selisih, Level : byte);
Var x : byte;
 Begin
  If (level < 6) then
   Begin
    Push(Tree,Nilai,Level);
    Input (Tree^.left, Nilai-selisih, selisih div
   2,level+1);
    Input(Tree^.Right,Nilai+selisih, selisih div
   2,level+1);
    End;
  End;

Procedure Show (var Tree:ptr; x,y,sel:byte);
Var i:byte;
Begin
  Gotoxy(x,y); write(Tree^.isi);
  If (Tree^.left <> nil) or (Tree^.right <> nil) then
    Begin
     Gotoxy(x-sel, y+1); write('| ');
     Gotoxy(x+sel, y+1); write('| ');
     For I :=  (x-sel)+1 to (x+sel)-1 do
      Begin
       Gotoxy(I,y+1); write('-');
      End;
       Gotoxy(x,y+1); write('| ');
    End;
  Inc(y,2);
  If Tree^.left <> nil then
    Show(Tree^.left, x-sel, y, sel div 2);
  If Tree^.Right <> nil then
    Show(Tree^.Right, x+sel, y, sel div 2);
End;

Procedure Search (var Tree:ptr; X,Y, Selisih, cari:byte);
Begin
 Inc (y,2);
 If cari < Tree^.isi then
 Begin
   If Tree^.left <> nil then
  Search(Tree^.Left, x-selisih, y, selisih div 2, cari)
 End else
 If cari > Tree^.Isi then
   Begin
     If Tree^.Right <> nil then

   Search(Tree^.Left, x+selisih, y, selisih div 2, cari)
 End else
 If cari = Tree^.isi then
   Begin
     Dec(y,2);
     Gotoxy(x,y); textcolor(10); write(cari); readkey;
     Gotoxy(x,y); textcolor(15); write(cari);
   End;
 If( (Tree^.left=nil) or (Tree^.right=nil)) and (cari <>
      Tree^.isi) then
   Begin
     Gotoxy(2,2); write('Data Tidak Ada'); readkey;
     Gotoxy(2,2); ClrEol;
   End;
 End;

Procedure CursorOff;assembler;
  Asm
    Mov ah,1
    Mov cx,0100h;
    Int 10h;
  End;
Procedure CursorOn;assembler;
  Asm
    Mov ah, 1
    Mov cx,0607h;
    Int 10h;
  End;

{*Program Utama*}
Begin
  Clrscr;
  Textcolor(15);
  Randomize;
  X := random(20);
    Input (Root, x+30, (x+30) div 2,1);
    Repeat
      Show (Root,40, 5, 20);
      Gotoxy(2,1); clreol;write ('find 0 = Quit :   ');
      Readln(cari);
      Now := Root; x:=40; y:=5;
      cursorOff;
      if cari <> 0 then search(Now,x,y,20,cari);
      cursorOn;
    until cari = 0;
end.

0 komentar:

Posting Komentar

Diberdayakan oleh Blogger.