001    
002    package brs;
003    
004    /**
005     * Computes a String representation of the binary tree host so that it can be
006     * printed vertically.
007     * @author Dung X. Nguyen - Copyright 2000 - All rights reserved.
008     * @author Mathias Ricken - Copyright 2008 - All rights reserved.
009     */
010    public class ToString<T> implements IVisitor<T,String,Void> {
011        private ToStringHelp<T> _toStringHelp = new ToStringHelp<T>();
012        /**
013         * Returns "[]", a String representation of an empty binary tree.
014         * @param host an empty binary tree.
015         * @param nu not used.
016         * @return String
017        */
018        public String emptyCase(BiTree<T> host, Void... nu) {
019            return "[]";
020        }
021    
022        /**
023         * Computes a String representation of the binary tree host so that it can
024         * be printed vertically. There is no '\n' at the end of the String.  Passes
025         * appropriate leftmost leading String to a helper visitor to compute the
026         * String representations of the left and right subtrees.
027         * @param host a non-empty binary tree.
028         * @param nu not used.
029         * @return String
030         */
031        public String nonEmptyCase(BiTree<T> host, Void... nu) {
032            String ls = host.getLeftSubTree().execute(_toStringHelp, "|  ");
033            String rs = host.getRightSubTree().execute(_toStringHelp, "   ");
034            return (host.getRootDat() + "\n" + ls + "\n" + rs);
035            // EXERCISE FOR STUDENTS: Rewrite using anonymous inner classes.
036        }
037    }