package binaryTree.visitor; import binaryTree.*; import ordering.*; /** * Removes the root of the host's parent. The host's parent and the calling deletion * algorithm are passed to this IVisitor in the constructor. */ public class LeftDeleter implements IVisitor { /** * The parent of the host. */ private BiTree _hostParent; /** * The BSTDeleter algorithm that calls this IVisitor. */ private IVisitor _deleter; public LeftDeleter (BiTree parent, IVisitor del) { _hostParent = parent; _deleter = del; } /** * Asks the _hostParent's right subtree to help delete _hostParent's root. * @param host the left subtree of _hostParent. * @param input not used * @return null. */ public Object emptyCase (BiTree host, Object input) { return _hostParent.getRightSubTree ().execute (new RightDelDontAsk (_hostParent, _deleter), null); // EXERCISE FOR STUDENTS: Replace RightDelDontAsk with an anonymous inner class. } /** * Finds the maximum value in the host. * Asks the _hostParent to set its root to this maximum value, and removes * this maximum value from the host. * @param host the left subtree of _hostParent. * @param input not used. * @return null. */ public Object nonEmptyCase (BiTree host, Object input) { BiTree maxTree = (BiTree)host.execute (MaxTreeFinder.Singleton, null); Object max = maxTree.getRootDat(); _hostParent.setRootDat (max); maxTree.execute (_deleter, max); return null; } }