rendered paste body
public abstract class BinaryTree
{
public abstract boolean lessThan(Object left, Object right);
public abstract boolean greaterThan (Object left, Object right);
public abstract boolean equal(Object left, Object right);
public abstract boolean notEqual(Object left, Object right);
public BinaryTree()
{
root = null;
size = 0;
}
public boolean nameExists(String name)
{
if ( root == null )
return false;
BinaryTreeNode nameLocationInTree = (nameLocation(name, false))[0];
return (nameLocationInTree != null);
}
public void insert (String withName, int number)
{
if (root == null)
{
root = new BinaryTreeNode(withName, number);
}
else {
BinaryTreeNode[] tempNodeAndParent = nameLocation(withName,false);
BinaryTreeNode insertedNode = tempNodeAndParent[0];
BinaryTreeNode parentNode = tempNodeAndParent[1];
insertedNode = new BinaryTreeNode(withName, number);
if (lessThan(withName, parentNode.getName()))
parentNode.setLeftChild(insertedNode);
else
parentNode.setRightChild(insertedNode);
}
size++;
}
public int size ()
{
return size;
}
protected BinaryTreeNode[] nameLocation(String name, boolean createIfNonExistent)
{
BinaryTreeNode currentNode = root;
BinaryTreeNode currentNodesParent = currentNode;
while ((currentNode != null) && (notEqual(currentNode.getName(),name)))
{
currentNodesParent = currentNode;
if (lessThan(name,currentNode.getName()))
currentNode = currentNode.getLeftChild();
else
currentNode = currentNode.getRightChild();
}
if ((currentNode == null) && createIfNonExistent)
{
currentNode = new BinaryTreeNode(name,1);
if (lessThan(name,currentNodesParent.getName()))
currentNodesParent.setLeftChild (currentNode);
else
currentNodesParent.setRightChild (currentNode);
}
BinaryTreeNode[] nodeAndParent = new BinaryTreeNode[2];
nodeAndParent[0] = currentNode;
nodeAndParent[1] = currentNodesParent;
return (nodeAndParent);
}
protected BinaryTreeNode root;
protected int size;
private long uniqueNum = 0;
}