Source of 27.12.java


  1: public T add(T newEntry)
  2: {
  3:    T result = null;
  4: 
  5:    if (isEmpty())
  6:       setRootNode(new BinaryNode<>(newEntry));
  7:    else
  8:    {
  9:       BinaryNode<T> rootNode = getRootNode();
 10:       result = addEntry(rootNode, newEntry);
 11:       setRootNode(rebalance(rootNode));
 12:    } // end if
 13: 
 14:    return result;
 15: } // end add
 16: 
 17: private T addEntry(BinaryNode<T> rootNode, T newEntry)
 18: {
 19:    assert rootNode != null;
 20:    T result = null;
 21:    int comparison = newEntry.compareTo(rootNode.getData());
 22: 
 23:    if (comparison == 0)
 24:    {
 25:       result = rootNode.getData();
 26:       rootNode.setData(newEntry);
 27:    }
 28:    else if (comparison < 0)
 29:    {
 30:       if (rootNode.hasLeftChild())
 31:       {
 32:          BinaryNode<T> leftChild = rootNode.getLeftChild();
 33:          result = addEntry(leftChild, newEntry);
 34:          rootNode.setLeftChild(rebalance(leftChild));
 35:       }
 36:       else
 37:          rootNode.setLeftChild(new BinaryNode<>(newEntry));
 38:    }
 39:    else
 40:    {
 41:       assert comparison > 0;
 42: 
 43:       if (rootNode.hasRightChild())
 44:       {
 45:          BinaryNode<T> rightChild = rootNode.getRightChild();
 46:          result = addEntry(rightChild, newEntry);
 47:          rootNode.setRightChild(rebalance(rightChild));
 48:       }
 49:       else
 50:          rootNode.setRightChild(new BinaryNode<>(newEntry));
 51:    } // end if
 52: 
 53:    return result;
 54: } // end addEntry
 55: // Version 4.0
 56: