On Fri, 16 Mar 2012 11:36:08 +0100
Felipe Monteiro de Carvalho <[email protected]> wrote:

> Can I add a routine to access the AvgLvlTree as an array?

No.

A tree in general has no first or 0 element.

If you want to iterate through all nodes, use an enumerator or the
findlowest+findsuccessor.

If you want a hybrid of array and avl tree use a differential tree.
Martin has implemented a specific one. Maybe a descendant of
TAvgLvlTree can be implemented as a generic one.


> To make it a
> better substitute to TFPList in objects which offer an indirect
> interface to the internal list, such as TLazAccessibleObject.
> 
> My idea is defining:
> Index zero = Tree.FindLowest
> Indez Count-1= Tree.FindHighest
> 
> On each access store the last accessed node and if the next call wants
> a node index=oldindex+1 or -1 then just use:
> 
>  Tree.FindSuccessor(Node)
>  Tree.FindPrecessor(Node)
> 
> Because almost always I use the array access only to iterate in a loop.

That's one specific use case.
For other examples how avl trees can be used see the hundreds of places
in the IDE.

 
> Non-ordened access ofcourse would be slow because it would require a
> loop till the index is found.

Keep the last node. It can be found in O(logn).
Why use an integer to refer to an element?

Mattias
 

--
_______________________________________________
Lazarus mailing list
[email protected]
http://lists.lazarus.freepascal.org/mailman/listinfo/lazarus

Reply via email to