
pretvor([],[]):-!.
pretvor([G|R],t(L,G,D)):-
        podeli_1(R,G,X1,X2),
        pretvor(X1,L),
        pretvor(X2,D).

podeli_1([],_,[],[]):-!.
podeli_1([G|R],X,[G|R1],R2):-ispred(X,G),podeli_1(R,X,R1,R2),!.
podeli_1([G|R],X,R1,[G|R2]):-podeli_1(R,X,R1,R2).

ispred(X,Y):- name(X,L1),name(Y,L2),manje(L1,L2).

manje([],[_|_]).
manje([X|_],[Y|_]):- X<Y.
manje([G1|R1],[G2,R2]):- G1=G2,manje(R1,R2).

prikazisleva([]):-!.
prikazisleva(t(L,K,D)):-prikazisleva(D),write(K),write(' '),prikazisleva(L).

prikazisdesna([]):-!.
prikazisdesna(t(L,K,D)):-prikazisdesna(L),write(K),write(' '),prikazisdesna(D).

korektna([]):-!.
korektna([G|R]):-atom(G),korektna(R).

treci:-write('Unesite listu atoma koje zelite da se sortiraju:'),nl,
	    write('[zavrsite unos tackom]'),nl,
		 read(L),
		 korektna(L),
		 pretvor(L,Drvo),nl,write('Prikaz s leva u desno:'),
		 nl,
		 prikazisleva(Drvo),
		 nl,
		 write('Prikaz zdesna u levo:'),
		 nl,
		 prikazisdesna(Drvo).
		 
