Section Header
    + name := AVL_TREE_NODE[E];
    - comment := "Auxiliary class to implement AVL_SET.";
This a classic implementation of an AVL tree (balanced tree first designed
by Adelson-Velskii and Landis (hence A.V.L.), 1960)
Section Insert
    - parent_avl_constants:AVL_CONSTANTS :=
Section Public
    - out_in_tagged_out_memory <-
Section Public
AVL_TREE_NODE, AVL_TREE
    + left:AVL_TREE_NODE[E];
    + right:AVL_TREE_NODE[E];
    + item:E;
    + balance:INTEGER;
        Balance factor; either `balanced' (the tree is balanced),
        `imbalanced_left' (the left branch is the longer) or
        `imbalanced_right' (the right branch is the longer)
    - count:INTEGER <-
    - height:INTEGER <-
    - map_in map:COLLECTION[AVL_TREE_NODE[E]] <-
    - has e:E :BOOLEAN <-
        Is element `e' in the tree?
    - fast_has e:E :BOOLEAN <-
        Is element `e' in the tree?
    - at e:E :AVL_TREE_NODE[E] <-
        Is element `e' in the tree?
    - set_item i:E <-
    - set_left l:AVL_TREE_NODE[E] <-
    - set_right r:AVL_TREE_NODE[E] <-
    - set_balance b:INTEGER <-
Section AVL_TREE, AVL_DICTIONARY, AVL_SET
Rotations:
    - rotate_right:AVL_TREE_NODE[E] <-
        Proceeds to some reorganisation and returns the upper node.
    - rotate_left:AVL_TREE_NODE[E] <-
        Proceeds to some reorganisation and returns the upper node.