// change parse call Main { {{ static void p(String s){ System.out.print(s); } static void p(){ System.out.println(); } public static void main(String args[]) throws Exception { // NodeInt tree = NodeInt.parse(System.in); NodeInt1 tree = NodeInt1.parse(System.in); p(" Tree: "+tree+"\n"); tree.print(); p(); tree.display(); p(); p(" Check: "+new Traversal(new Check()).traverse(tree)+"\n"); p(" Check result " + Check.check(tree)); p(" Sum: "+new Traversal(new Sum()).traverse(tree)+"\n"); p(" Diameter: "+new Traversal(new Diameter()).traverse(tree)+"\n"); DiameterPair pair = new Traversal(new Diameter()).traverse(tree); pair.print(); p(); p(" ToStr: "+new Traversal(new ToStr()).traverse(tree)+"\n"); ///// p(" Incr: "+new Traversal(new Incr()).traverse(tree)+"\n"); ///// BSTInt incremented = new Traversal(new Incr()).traverse(tree); ///// incremented.print(); p(); p("Height: "+new Traversal(new Height()).traverse(tree,0)+"\n"); p("Height2: "+new Traversal(new Height2()).traverse(tree,0)+"\n"); p("Height3: "+new Traversal(new Height3()).traverse(tree,new DownHeight(0))+"\n"); p("String: "+new Traversal(new Strs()).traverse(tree)+"\n"); // what does this do?? creates a tree of strings. Why not caught by type checking? // p("Rev: "+new Traversal(new Rev()).traverse(tree)+"\n"); // BSTInt withText = new Traversal(new Rev()).traverse(tree); // Does not work with a tree of Integer ////////! BSTInt reversed = new Traversal(new Rev()).traverse(tree); ////////! reversed.print(); p(); System.out.println(" done "); } }} } BSTInt{ void print() to * (PrintVisitor);} BSTInt1{ void print() to * (PrintVisitor);} BSTInt{ void display() to * (DisplayVisitor);} BSTInt1{ void display() to * (DisplayVisitor);} DiameterPair{ void print() to * (PrintVisitor);} BSTInt{ {{ abstract boolean isEmpty(); }} } NodeInt { {{ boolean isEmpty(){ return false;} }} } EmptyInt { {{ boolean isEmpty(){ return true;} }} } Node { {{ }} }