Кто-нибудь знает какие-либо более простые способы построения полностью сбалансированных деревьев в Прологе?
Вот одно решение, которое я нашел, но мне интересно, кто-нибудь знает какие-нибудь более простые решения?
Это довольно просто, но мне понадобилось немного времени, чтобы понять, как именно это работает.
Спасибо:).
% from given solution
cbal_tree( 0, nil ) :- !.
cbal_tree( N, t(x,L,R) ) :-
N > 0,
N0 is N - 1, % if N is 4, this would be 3
N1 is N0 mod 2, % if N is 4, this would be 3 mod 2 = 1
N2 is N0 - N1, % if N is 4, this would be 3-1= 2
distrib( N1, N2, LeftNode, RightNode ),
cbal_tree( LeftNode, L ),
cbal_tree( RightNode, R ).
distrib(N,N,N,N) :- !.
distrib(N1,N2,N1,N2). % giving these two clauses (*) 1,2,?,? could give 1,2 or 2,1
distrib(N1,N2,N2,N1). % (*)