1. How are you going to construct a tree in a language that doesn't natively support them? You could emulate them in an array, but then you may as well just treat it as a list/array.
2. No, they wouldn't be more efficient in memory, but maybe in performance, depending on how these structures are going to be used. Lots of inserts during the running of your program may be slower if you are using an array, but maybe not.
Suggestion 1.
Use a binary search for searching for matches,
and for finding the insertion point for new items.
The downside is that if you have a lot of insertions, it can be slow to shift all of that data around in the array
if you have a large array (I'm talking 10's of thousands of items or more).
Suggestion 2.
Use a sorted array, with a binary search, and a 'dirty' flag...
When searching, if the dirty flag is set, then you sort the array and clear the flag, and then finally carry out your search. (If it's not set, then don't sort).
When inserting, append the new item to the end of the array and set the dirty flag.
That simply mechanism gives you relatively efficient bulk-insertion, and fast search. You can either code the sort yourself, or use the
SORT ARRAY command in my plug-ins.
Neither suggestion includes a description of how to handle deletions, but it's the same for both. Locate the item you want to delete, then use the ARRAY DELETE ELEMENT command to remove it - it's a fairly efficient command, as all it does is shift pointers around behind the scenes.