package brs.clients; import brs.*; import brs.visitor.*; import utils.fp.*; /** * Driver to test the primitive structural behaviors of a BiTree and * the vertical tree printing algorithm via the toString method. * @author Dung X. Nguyen */ public class BiTreeClient { /** * Concatenate 3 Strings in order. */ ILambda inOrderCat = new ILambda() { public Object apply(final Object s1) { return new ILambda() { public Object apply(final Object s2) { return new ILambda() { public Object apply(final Object s3) { return s1 + " " + s2 + " " + s3; } }; } }; } }; /** * Concatenate 3 Strings pre order. */ ILambda preOrderCat = new ILambda() { public Object apply(final Object s1) { return new ILambda() { public Object apply(final Object s2) { return new ILambda() { public Object apply(final Object s3) { return s2 + " " + s1 + " " + s3; } }; } }; } }; /** * Concatenate 3 Strings post order. */ ILambda postOrderCat = new ILambda() { public Object apply(final Object s1) { return new ILambda() { public Object apply(final Object s2) { return new ILambda() { public Object apply(final Object s3) { return s1 + " " + s3 + " " + s2; } }; } }; } }; IVisitor printRoot = new IVisitor() { public Object emptyCase(BiTree host, Object nu) { return ""; } public Object nonEmptyCase(BiTree host, Object nu) { return host.getRootDat().toString(); } }; public void testTree() { BiTree t0 = new BiTree(); t0.insertRoot(new Integer(15)); System.out.println("t0's root = " + t0.getRootDat()); System.out.println("t0.remRoot() returns " + t0.remRoot ()); BiTree t1 = new BiTree(); t1.insertRoot(new Integer(55)); BiTree t2 = new BiTree(); t2.insertRoot(new Integer(79)); t1.setLeftSubTree(t0); t1.setRightSubTree(t2); t0.insertRoot(new Integer(62)); t0.getLeftSubTree().insertRoot(new Integer(20)); t0.getRightSubTree().insertRoot(new Integer(7)); t2.getLeftSubTree().insertRoot(new Integer(200)); t2.getRightSubTree().insertRoot(new Integer(100)); t0.getLeftSubTree().getRightSubTree().insertRoot(new Integer(18)); t0.getLeftSubTree().getRightSubTree().getLeftSubTree(). insertRoot(new Integer(39)); t2.getLeftSubTree().getRightSubTree().insertRoot(new Integer(30)); t2.getLeftSubTree().getRightSubTree().getLeftSubTree(). insertRoot(new Integer(-17)); System.out.println("t0 is: \n" + t0 + "\n"); System.out.println("in order: "); System.out.println(toStringUsingInOrder(t0, printRoot, inOrderCat)); System.out.println("pre order: "); System.out.println(toStringUsingInOrder(t0, printRoot, preOrderCat)); System.out.println("post order: "); System.out.println(toStringUsingInOrder(t0, printRoot, postOrderCat)); } private String toStringUsingInOrder (BiTree bt, IVisitor r, ILambda cr) { return (String)bt.execute(new IPPOrderTraverse(r, cr), null); } /** * @param args == null - not used. */ public static void main(String[] args) { new BiTreeClient().testTree(); } }