AVL Tree

From Free Pascal wiki
Revision as of 03:38, 18 March 2012 by Mattias2 (talk | contribs) (New page: =TAVLTree= Implemented in the FCL unit '''avl_tree'''. This is the predecessor of TAvgLvlTree. =TAvgLvlTree= The AVL trees - Average Level Trees are sorted self balancing binary trees....)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigationJump to search

TAVLTree

Implemented in the FCL unit avl_tree. This is the predecessor of TAvgLvlTree.

TAvgLvlTree

The AVL trees - Average Level Trees are sorted self balancing binary trees. Similar to a list like TPFList a TAvgLvlTree can store arbitrary data (Pointer), but contrary to TFPList the tree is always sorted and balanced. Therefore searching is very fast. Features:

  • You can define your own compare function or method.
  • Searching an item or key takes O(log(n))
  • Inserting an item takes O(log(n))
  • Deleting an item takes O(log(n))
  • Finding the lowest or highest item takes log(n)
  • Finding the sucessor or precessor item takes O(log(n))
  • Iterating through all items in order takes O(n)
  • Enumerators for running from lowest to highest and highest to lowest
  • Supports duplicates
  • Keeps duplicates order stable.
  • It is not thread safe, but it does not use any global variables. So it can be used in threads just like TFPList.

Creating a tree

To create a tree you only need a compare function. The following example demonstrates how to sort TMyData objects via their Filenames: The foll example

<Delphi> type

 TMyData = class
 public
   Filename: string;
   Content: string;
 end;

function CompareMyData(Data1, Data2: Pointer): integer; begin

 Result:=CompareFilenames(TMyData(d1).Filename,TMyData(d2).Filename);

end;

... Tree:=TAvgLvlTree.Create(@CompareMyData); MyData1:=TMyData.Create; MyData1.Filename:='SomeFile'; Tree.Add(MyData1); </Delphi>