/* avltree.q: AVL search tree data structure (11-07-1993, revised 03-02-2002 AG) */ /* This file is part of the trees.q sample script. */ include searchtree; public type AVLTree : SearchTree = private const nil, bin X H T1 T2; public mkavltree Xs; private mknode X T1 T2; private join T1 T2, init T, last T, height T, slope T, rebal T; private rol T, ror T, shl T, shr T; mkavltree Xs:List = foldl insert nil Xs; members nil = []; members (bin H X T1 T2) = members T1 ++ [X|members T2]; insert nil Y = bin 1 Y nil nil; insert (bin H X T1 T2) Y = rebal (mknode X (insert T1 Y) T2) if X>Y; = rebal (mknode X T1 (insert T2 Y)) if XY; = rebal (mknode X T1 (delete T2 Y)) if XY; = member T2 Y if X