Procedure Delete (x : TipeData; Var T : BST);
Var
Bantu : Pointer;
Begin
If (T = Nil) Then
Writeln(‘Error : ‘, x, ‘ tidak ditemukan ‘)
Else If (x T^.Info) TheElse Then
Delete(x, T^.Kanan) (*rekursif ke kanan *)
Else (*x ditemukan *)
If (T^.Kiri = Nil And T^.Kanan = Nil) Then (*Kasus x adalah daun *)
Begin
Bantu := T; (*Tangkap node dengan pointer Bantu *)
T := Nil; (*potong T yang tadinya menunjuk node berisi x *)
Dispose(Bantu) (*deallocate Bantu atau lepaskan node *)
End
Else If (T^.Kiri = Nil) Then (*x berada pada node dimana kirinya nil *)
Begin
Bantu := T;
T := T^.Kanan; (* Set T = pointer kanannya *)
Bantu^.Kanan := Nil; (*putuskan hubungan node dgn kanannya *)
Dispose (Bantu); (*lepaskan node berisi x *)
End
Else If (T^.Kanan = Nil) Then (*x berada dinode dimana kanannya nil *)
Begin
Bantu := T;
T := T^.Kiri ; (* Set T = pointer kirinya *)
Bantu^.Kiri := Nil; (*putuskan hubungan node dengan kirinya *)
Dispose (Bantu); (* lepaskan node yang berisi x *)
End
Else (* pointer kiri dan kanan T tidak kosong *)
T^.Info := DeleteMin(T^.Kanan)
End;