ADTTree

AVL tree (Adelson-Velsky and Landis) is a self-balancing binary search tree.

AVL trees keep the order of nodes on insertion/delete and allow for fast find operations (average and worst case O(log n))

Copyright (c) 1993 xTech Ltd, Russia. All Rights Reserved. Tenko : Modified for inclusion in library.

Types

TreeNode* = POINTER TO TreeNodeDesc;
TreeNodeDesc* = RECORD
        element-: ADT.Element;
        left, right, up: TreeNode;
        bal: LONGINT;
    END;
Tree * = POINTER TO TreeDesc;
TreeDesc* = RECORD (TreeNodeDesc)
        minimum: TreeNode;
        size: LONGINT;
    END;
TreeIterator* = POINTER TO TreeIteratorDesc;
TreeIteratorDesc* = RECORD
        tree : Tree;
        current : TreeNode;
        reverse : BOOLEAN;
    END;

Procedures

TreeNode.Next

PROCEDURE (this : TreeNode) Next*() : TreeNode;

TreeNode.Prev

Prev node or NIL if first

PROCEDURE (this : TreeNode) Prev*() : TreeNode;

Tree.Clear

Clear tree content

PROCEDURE (this : Tree) Clear*;

Tree.Init

Initialize

PROCEDURE (this : Tree) Init*;

Tree.IsEmpty

Return TRUE if tree is empty

PROCEDURE (this: Tree) IsEmpty*(): BOOLEAN;

Tree.Size

Return tree size

PROCEDURE (this: Tree) Size*(): LONGINT;

Tree.First

Return first node

PROCEDURE (this: Tree) First*(): TreeNode;

Tree.Last

Return last node

PROCEDURE (this: Tree) Last*(): TreeNode;

Tree.Iterator

Get tree iterator

PROCEDURE (this : Tree) Iterator*(reverse := FALSE : BOOLEAN): TreeIterator;

TreeIterator.Next

Advance iterator. Return FALSE if end is reached.

PROCEDURE (this : TreeIterator) Next*() : BOOLEAN;

TreeIterator.Element

Current element or NIL

PROCEDURE (this : TreeIterator) Element*() : ADT.Element;

TreeIterator.Reset

Reset iterator to start of tree.

PROCEDURE (this : TreeIterator) Reset*();

Tree.FindNode

Find node equal to element argument. Return NIL if no node is found.

PROCEDURE (this: Tree) FindNode*(element: ADT.Element) : TreeNode;

Tree.Find

Find element equal to argument. Return NIL if no element is found.

PROCEDURE (this: Tree) Find*(element: ADT.Element) : ADT.Element;

Tree.Insert

Insert element

PROCEDURE (this: Tree) Insert*(e: ADT.Element);

Tree.Remove

Remove element from tree if found

PROCEDURE (this: Tree) Remove*(e: ADT.Element);