/**
* Refinement mapping sort BinaryTree[Element] into a class LinkedBinaryTree
*
* Project Quest.
*
* @author Vasco T. Vasconcelos
* @version $Id: LinkedBinaryTree.rfn 349 2008-04-16 22:38:19Z vv $
*/
refinement
Element is E
BinaryTree[Element] is LinkedBinaryTree {
make: e:Element l:BinaryTree[Element] r:BinaryTree[Element] --> BinaryTree[Element]
is LinkedBinaryTree(E e, LinkedBinaryTree l, LinkedBinaryTree r);
empty: --> BinaryTree[Element]
is LinkedBinaryTree();
data: BinaryTree[Element] -->? Element
is E data();
leftSubtree: BinaryTree[Element] -->? return:BinaryTree[Element]
is LinkedBinaryTree leftSubtree();
rightSubtree: BinaryTree[Element] -->? return:BinaryTree[Element]
is LinkedBinaryTree rightSubtree();
isEmpty: BinaryTree[Element]
is boolean isEmpty();
isLeaf: BinaryTree[Element]
is boolean isLeaf();
height: BinaryTree[Element] --> int
is int height();
occurrences: BinaryTree[Element] e:Element --> int
is int occurrences(E e);
isBalanced: BinaryTree[Element]
is boolean isBalanced();
isPerfect: BinaryTree[Element]
is boolean isPerfect();
isComplete: BinaryTree[Element]
is boolean isComplete();
}
end refinement