BSTツリーの実装にはinorder
がよく知られています。Prolog、インオーダーリストからBSTツリーを再構築
inorder(nil, []).
inorder(t(Root, L, R), List) :-
inorder(L, ListLeft),
inorder(R, ListRight),
append(ListLeft, [Root|ListRight], List).
ただし、リストにはできますか?私はすべての可能なBSTツリーを再構築することを意味します。例えば、
inorder(X, [1,2,3]).
X = t(1, nil, t(2, nil, t(3, nil, nil))));
X = t(3, t(2, t(1, nil, nil), nil), nil), nil);
X = t(2, t(1, nil, nil), t(3, nil, nil));
false.
私にとっては不可能なようです。
可能性があり、あなたが持っているだろう最終的にDCG(Definite Clause Grammar)について学ぶことができます。 Markus Triskaが書いた[優良プライマー](https://www.metalevel.at/prolog/dcg.html)を読んでください。それには、この質問への解決策を含め、多くのゴールドナゲットがあります。 –
このリンクに感謝します。 –