/** Returns an iterator of the elements stored at the nodes */
public Iterator elements() {
Iterator positer = positions();
List elements = new NodeList();
for (int i = 0; i < size; i++)
elements.insertLast(((Position) positer.next()).element());
return elements.elements(); // An iterator of elements
}
/** Replaces the element at a node. */
public Object replace(Position v, Object o)
throws InvalidPositionException {
BTPosition vv = checkPosition(v);
Object temp = v.element();
vv.setElement(o);
return temp;
}
// Additional accessor method
/** Return the sibling of a node */
public Position sibling(Position v)
throws InvalidPositionException, BoundaryViolationException {
try {
Position p = parent(v);
Position lc = left(p);
if (v == lc)
return right(p);
else
return lc;
}
catch(BoundaryViolationException e) {
throw new BoundaryViolationException("Node has no sibling");
}
}
// Additional update methods
/** Inserts a left child at a given node. */
public Position insertLeft(Position v, Object e)
throws InvalidPositionException {
if (hasLeft(v))
throw new InvalidPositionException("Node already has a left child");
BTPosition vv = (BTPosition)v;
BTPosition ww = createNode(e, vv, null, null);
vv.setLeft(ww);
size++;
return ww;
}