BST ağacı için inorder
uygulamasını iyi biliyoruz.Prolog, BST ağaçlarını inorder listesinden yeniden oluştur
inorder(nil, []).
inorder(t(Root, L, R), List) :-
inorder(L, ListLeft),
inorder(R, ListRight),
append(ListLeft, [Root|ListRight], List).
Ancak, liste için bunu yapmak mümkün mü? Mümkün olan tüm BST ağaçlarını yeniden yapılandırmak istiyorum, örneğin:
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.
Benim için imkansız gibi görünüyor.
olabilir Gereken tek değişiklik isterseniz, olacak Sonunda DCG (Kesin Aletli Dilbilgisi) hakkında bilgi edinmek için, neden şimdi değil. Zaman ayırın ve Markus Triska tarafından yazılan [mükemmel primer] (https://www.metalevel.at/prolog/dcg.html) okuyun. Tam olarak bu soruna bir çözüm de dahil olmak üzere birçok altın külçeleri var. Bu bağlantı için –
teşekkürler. –