0
Prologで完全にバランスの取れたツリーを構築する簡単な方法を知っている人はいますか?Prolog:完全にバランスのとれたツリーの構築
これは私が見つけた1つの解決策ですが、誰かがもっと簡単な解決策を知っているのだろうかと思います。
これはかなりシンプルですが、動作の仕組みを正確に把握するのに少し時間がかかりました。
ありがとうございました。
% 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). % (*)
ありがとうlarsmans。私はあなたが何を得ているのかを見ます。しかし、あなたが別の解を求めて、ツリー表記がt(x、L、R)ならば、それはハングします。ここで、xはルートノードです。それ以外はもっと簡単です。 – ale
が編集されました。これは本当に素早いハックでした。 –