%query: hbal_tree(b,f).

/* motivated by P59 of Hett */

hbal_tree(zero,nil).
hbal_tree(s(zero),t(x,nil,nil)).
hbal_tree(s(s(X)),t(x,L,R)) :- 	distr(s(X),X,DL,DR),
	hbal_tree(DL,L), hbal_tree(DR,R).

distr(D1,_,D1,D1).
distr(D1,D2,D1,D2).
distr(D1,D2,D2,D1).