include "std.led";
include "olist.led";
include "tree.led";
include "dictionary.led";
function treeSort [X : ordered] (aList : List[X])->List[X];
var
aTree : Tree[X];
newList : List[X];
element : X;
begin
{ first copy values into the tree }
aTree := Tree[X]();
for aList.items(element) do
aTree.add(element);
{ then copy them back into a list }
newList := List[X]();
element := NIL;
for aTree.items(element) do
newList.addToEnd(element);
{ return the new list of values }
return newList;
end;
var
aTree : Tree[integer];
v : integer;
aList : List[integer];
begin
aTree := Tree[integer]();
aTree.add(2);
aTree.add(4);
aTree.add(2);
aTree.add(3);
for aTree.items(v) do
begin
print(v);
print(" ");
end;
print("\n");
aTree.remove(2);
for aTree.items(v) do
begin
print(v);
print(" ");
end;
print("\n");
print("unsorted list");
aList := List[integer]() + 4 + 2 + 3 + 7 + 4;
for aList.items(v) do begin
print(v);
print(" ");
end;
print("\n");
aList := treeSort[integer](aList);
print("sorted list");
for aList.items(v) do begin
print(v);
print(" ");
end;
print("\n");
end;