public interface BinaryTree {
    int size();
    boolean isEmpty();

    Position root() throws BinaryTreeException;
    Position parent(Position position) throws BinaryTreeException;
    Position leftChild(Position position) throws BinaryTreeException;
    Position rightChild(Position position) throws BinaryTreeException;
    boolean isInternal(Position position) throws BinaryTreeException;
    boolean isExternal(Position position) throws BinaryTreeException;
    boolean isRoot(Position position) throws BinaryTreeException;
}
