class IntSet21 { // Constructive Set class, sets stored as ordered ADT trees // Uses stack rather than recursion to print trees // Includes breadth-first print method private Tree tree; public IntSet21() { tree=Tree.empty(); } private IntSet21(Tree t) { tree=t; } public IntSet21 delete(int n) { return new IntSet21(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 IntSet21 add(int n) { return new IntSet21(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