/* * Nathaniel Lim * CS 136 Williams College * Mon, April 14, 2008 */ import java.util.ArrayList; public class BinaryMultiTree<T> implements Iterable<T> { private Comparator<T> comparator; private BinaryMultiTree<T> left; private BinaryMultiTree<T> right; private ArrayList<T> values = new ArrayList<T>(); public BinaryMultiTree(Comparator<T> comparator){ this.comparator = comparator; } public int size(){ int out = values.size(); if (left!=null){ out += left.size(); } if (right!=null){ out += right.size(); } return out; } public void add(T x){ //This should only add if the node was recently instantiated if (values.size()==0){ values.add(x); } else { int c = comparator.compare(x, values.get(0)); if (c == 0){ values.add(x); } else if (c < 0){ if (left == null){ //create a new node left = new BinaryMultiTree<T>(comparator); } left.add(x); } else { if (right == null){ //create a new node right = new BinaryMultiTree<T> (comparator); } right.add(x); } } } public boolean contains(T x){ int c = comparator.compare(x, values.get(0)); if (c == 0) { return values.contains(x); } else if (c < 0) { if (left!= null){ return left.contains(x); } else { return false; } } else { if (right!= null){ return right.contains(x); } else { return false; } } } public void clear(){ values = new ArrayList<T>(); left = new BinaryMultiTree<T>(comparator); right = new BinaryMultiTree<T>(comparator); } public T remove(T x){ int c = comparator.compare(x, values.get(0)); if (c == 0) { return values.contains(x); } else if (c < 0) { if (left!= null){ return left.contains(x); } else { return false; } } else { if (right!= null){ return right.contains(x); } else { return false; } } } public T get(T x){ return null; } public Iterator<T> iterator() { } public class Name { private String first, last; public Name (String first, String last){ this.first = first; this.last = last; } public String getFirst(){ return first; } public String getLast(){ return last; } public boolean equals (Object other){ if (! other instanceof Name){ return false; } else { return last.equals(other.getLast()) && first.equals(other.getFirst()); } } public String toString(){ return first + " " + last; } } public LastNameComparator implements Comparator<Name> { public int compare (Name a, Name b){ return a.getLast().compare(b.getLast()); } public boolean equals (Object obj) { return false; } } }