class IntSet22 { // Constructive Set class, sets stored as ordered ADT trees // Uses stack rather than recursion to print trees // Includes breadth-first print method // Uses array implementation of stacks and queues private Tree tree; public IntSet22() { tree=Tree.empty(); } private IntSet22(Tree t) { tree=t; } public IntSet22 delete(int n) { return new IntSet22(delete(n,tree)); } private static Tree delete(int n,Tree t) { if(t.isEmpty()) return Tree.empty(); else if(nt.item()) return Tree.make(t.item(),t.left(),delete(n,t.right())); else if(t.left().isEmpty()) return t.right(); else if(t.right().isEmpty()) return t.left(); else { int m=rightmost(t.left()); Tree newleft=removeRightmost(t.left()); return Tree.make(m,newleft,t.right()); } } private static int rightmost(Tree t) { if(t.right().isEmpty()) return t.item(); else return rightmost(t.right()); } private static Tree removeRightmost(Tree t) { if(t.right().isEmpty()) return t.left(); else return Tree.make(t.item(),t.left(),removeRightmost(t.right())); } public IntSet22 add(int n) { return new IntSet22(add(n,tree)); } private static Tree add(int n, Tree t) { if(t.isEmpty()) return Tree.make(n,Tree.empty(),Tree.empty()); else if(n==t.item()) return t; else if(n