lista1([50,30,60,40,20,10]).

% beszuras binaris faba

beszur(ures,Elem,bfa(Elem,ures,ures)).
beszur(bfa(E,B,J),Elem,Fa):- Elem<E, beszur(B,Elem,B1), Fa=bfa(E,B1,J).
beszur(bfa(E,B,J),Elem,Fa) :- Elem>=E, beszur(J,Elem,J1), Fa=bfa(E,B,J1).

% torles

torol(bfa(E,B,J),X,Fa):- X<E, torol(B,X,B1), Fa=bfa(E,B1,J).
torol(bfa(E,B,J),X,Fa):- X>E, torol(J,X,J1), Fa=bfa(E,B,J1).
torol(bfa(X,ures,ures),X,ures).
torol(bfa(X,B,ures),X,B).
torol(bfa(X,ures,J),X,J).
torol(bfa(X,B,J),X,Fa):- minelem(J,E1), torol(J,E1,J1), Fa=bfa(E1,B,J1).

minelem(bfa(E,ures,_),E).
minelem(bfa(_,B,_),N):- minelem(B,N).
% Hogyan módosítanád a torol szabályait, hogy mindig csak egy megoldást adjon vissza?

% listabol binaris fa

lista_bfa(Lista,Fa):- lista_bfa(Lista,ures,Fa).
lista_bfa([],BF,BF).
lista_bfa([E|L],BF0,BF):- beszur(BF0,E,BF1), lista_bfa(L,BF1,BF).

% binaris fabol lista

bfa_lista(ures,L,L).
bfa_lista(bfa(E,B,J),L0,L):- bfa_lista(J,L0,L1), bfa_lista(B,[E|L1],L).

% lista rendezo

rendez(L,R):- lista_bfa(L,ures,BF), bfa_lista(BF,[],R).


% A sicstus prolog beépített fakezelő moduljáráról itt olvashatsz.


%--------------------------------------------------------------------------------------



select(E,[E|L],L).
select(E,[A|L],[A|L1]):- select(E,L,L1).

%---------------------------------------------------------------------------------


graf1([a-b,a-d,b-c,b-d,b-e,c-d,c-e,d-e]).
graf2([a-b,a-d,b-c,b-d]).
graf3([a-b,a-d,c-e]).

conn(_-P,[P-_|_]).
seta([_]).
seta([E|L]):- conn(E,L), seta(L).

azonos_el(P-Q,P-Q).
azonos_el(P-Q,Q-P).

graf_list([],[]).
graf_list(G1,[E1|L1]):- select(E2,G1,G2), azonos_el(E2,E1), graf_list(G2,L1).

bejar(G,L):- graf_list(G,L), seta(L).

bovit([],A,[A]).
bovit([B|L],A,[B|L]):- B=A.
bovit([B|L],A,[B|L1]):- B\=A, bovit(L,A,L1).

csucsok([],[]).
csucsok([A-B|G],L):- csucsok(G,L1), bovit(L1,A,L2), bovit(L2,B,L).