delete(X, tree(X, L, R), T) :- !,
	insert(L, R, T).
delete(X, tree(Y, L, R), tree(Y, L1, R)) :-
	X < Y, !,
	delete(X, L, L1).
delete(X, tree(Y, L, R), tree(Y, L, R1)) :-
	X > Y, !,
	delete(X, R, R1).
delete(_, *, *).

insert(L, tree(X, L1, R), tree(X, L2, R)) :- !,
	insert(L, L1, L2).
insert(L, *, L).

ptree(tree(X, L, R), N) :- !,
	tab(N),
	print(X),
	N1 is N + 4,
	ptree(L, N1),
	ptree(R, N1).
ptree(X, N) :-
	tab(N),
	print(X).

print_tree(X) :- ptree(X, 0).

a :-
	delete(10, tree(10, *, *), X),
	print_tree(X).

b :-
	delete(10, tree(10, tree(8, *, *), tree(12, *, *)), X),
	print_tree(X).

c :-
	delete(10, tree(10, tree(8, *, *), *), X),
	print_tree(X).

d :-
	delete(10, tree(10, *, tree(12, *, *)), X),
	print_tree(X).

e :-
	delete(12, tree(10, *, tree(12, *, *)), X),
	print_tree(X).

f :-
	delete(8, tree(10, tree(8, *, *), *), X),
	print_tree(X).

g :-
	delete(8, tree(10, tree(8, tree(6, *, *), *), *), X),
	print_tree(X).

h :-
	delete(12, tree(10, *, tree(12, *, tree(14, *, *))), X),
	print_tree(X).

l :-
	delete(12,
		tree(8,
			*,
			tree(12,
				tree(10,
					tree(9, *, *),
					tree(11, *, *)
				),
				tree(16,
					tree(14,
						tree(13, *, *),
						tree(15, *, *)
					),
					tree(18,
						tree(17, *, *),
						tree(19, *, *)
					)
				)
			)
		),
		X
	),
	print_tree(X).
