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.
Rabu, 30 November 2011
Langganan:
Posting Komentar (Atom)
Diberdayakan oleh Blogger.
0 komentar:
Posting Komentar