001    
002    package brs;
003    
004    /**
005     * Represents the state of the owner binary tree structure.  Union pattern
006     * @author Dung X. Nguyen - Copyright 2001 - All rights reserved.
007     * @author Mathias Ricken - Copyright 2008 - All rights reserved.
008     */
009    abstract class ANode<T> {
010        /**
011        * Gets the root data of the owner tree if it exists.
012        * @param owner the BiTree that holds this node.
013        * @return the data element of this node if it exists.
014        * @exception NoSuchElementException if the owner is empty.
015        */
016        abstract T getRootDat(BiTree<T> owner);
017    
018        /**
019        * Sets the root element of the owner tree to a given data object.
020        * @param dat
021        * @param owner the BiTree that holds this node.
022        * @exception NoSuchElementException if the owner is empty.
023        */
024        abstract void setRootDat(BiTree<T> owner, T dat);
025    
026        /**
027        * Gets the left subtree of the owner tree.
028        * @param owner the BiTree that holds this node.
029        * @return the left subtree of this node if it exists.
030        * @exception NoSuchElementException if the owner is empty.
031        */
032        abstract BiTree<T> getLeftSubTree(BiTree<T> owner);
033    
034        /**
035        * Gets the right subtree of the owner tree.
036        * @param owner the BiTree that holds this node.
037        * @return the right subtree of this node if it exists.
038        * @exception NoSuchElementException if the owner is empty.
039        */
040        abstract BiTree<T> getRightSubTree(BiTree<T> owner);
041    
042        /**
043        * Sets the left subtree of the owner tree to a given tree.
044        * @param biTree != null.
045        * @param owner the BiTree that holds this node.
046        * @exception NoSuchElementException if the owner is empty.
047        */
048        abstract void setLeftSubTree(BiTree<T> owner, BiTree<T> biTree);
049    
050        /**
051        * Sets the right subtree of the owner tree to a given tree.
052        * @param biTree != null.
053        * @param owner the BiTree that holds this node.
054        * @exception NoSuchElementException if the owner is empty.
055        */
056        abstract void setRightSubTree(BiTree<T> owner, BiTree<T> biTree);
057    
058        /**
059        * Inserts a root element to the owner tree. Allows the owner tree to change
060        * state from empty to non-empty.
061        * @param dat
062        * @param owner the BiTree that holds this node.
063        * @exception IllegaStateException if the owner is not empty.
064        */
065        abstract void insertRoot(BiTree<T> owner, T dat);
066    
067        /**
068        * Removes and returns the root element from the owner tree.  Allows the
069        * owner tree to change state from non-empty to empty.
070        * @param dat
071        * @param owner the BiTree that holds this node.
072        * @exception IllegaStateException if the owner has more than one element.
073        */
074        abstract T remRoot(BiTree<T> owner);
075    
076        /**
077        * Calls the appropriate visitor's method to execute the visiting algorithm.
078        * @param owner the BiTree that holds this node.
079        * @param algo the visiting algorithm
080        * @param inp the vararg input the algorithm needs.
081        * @return the output for the algorithm.
082        */
083        abstract <R,P> R execute(BiTree<T> owner, IVisitor<T,R,P> algo, P... inp);
084    }
085