/** * 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